about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/web
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/web')
-rw-r--r--nixpkgs/pkgs/development/web/csslint/default.nix35
-rw-r--r--nixpkgs/pkgs/development/web/grails/default.nix52
-rw-r--r--nixpkgs/pkgs/development/web/insomnia/default.nix97
-rw-r--r--nixpkgs/pkgs/development/web/kcgi/default.nix33
-rw-r--r--nixpkgs/pkgs/development/web/kore/default.nix31
-rw-r--r--nixpkgs/pkgs/development/web/mailcatcher/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/web/mailcatcher/Gemfile.lock41
-rw-r--r--nixpkgs/pkgs/development/web/mailcatcher/default.nix15
-rw-r--r--nixpkgs/pkgs/development/web/mailcatcher/gemset.nix128
-rw-r--r--nixpkgs/pkgs/development/web/minify/default.nix24
-rw-r--r--nixpkgs/pkgs/development/web/nodejs/build-node-package.nix333
-rw-r--r--nixpkgs/pkgs/development/web/nodejs/nodejs-release-keys.asc776
-rw-r--r--nixpkgs/pkgs/development/web/nodejs/nodejs.nix131
-rw-r--r--nixpkgs/pkgs/development/web/nodejs/setup-hook.sh5
-rwxr-xr-xnixpkgs/pkgs/development/web/nodejs/update-keyring18
-rw-r--r--nixpkgs/pkgs/development/web/nodejs/update.nix29
-rw-r--r--nixpkgs/pkgs/development/web/nodejs/v10.nix10
-rw-r--r--nixpkgs/pkgs/development/web/nodejs/v11.nix10
-rw-r--r--nixpkgs/pkgs/development/web/nodejs/v12.nix10
-rw-r--r--nixpkgs/pkgs/development/web/nodejs/v8.nix10
-rw-r--r--nixpkgs/pkgs/development/web/now-cli/default.nix87
-rw-r--r--nixpkgs/pkgs/development/web/postman/default.nix97
-rw-r--r--nixpkgs/pkgs/development/web/remarkjs/default.nix70
-rw-r--r--nixpkgs/pkgs/development/web/remarkjs/generate.sh3
-rw-r--r--nixpkgs/pkgs/development/web/remarkjs/node-packages.nix3994
-rw-r--r--nixpkgs/pkgs/development/web/remarkjs/nodepkgs.nix17
-rw-r--r--nixpkgs/pkgs/development/web/remarkjs/pkgs.json12
-rw-r--r--nixpkgs/pkgs/development/web/twitter-bootstrap/3.nix26
-rw-r--r--nixpkgs/pkgs/development/web/twitter-bootstrap/default.nix26
-rw-r--r--nixpkgs/pkgs/development/web/valum/default.nix25
-rw-r--r--nixpkgs/pkgs/development/web/wml/default.nix64
-rw-r--r--nixpkgs/pkgs/development/web/wml/dynaloader.patch11
-rw-r--r--nixpkgs/pkgs/development/web/wml/no_bitvector.patch10
-rw-r--r--nixpkgs/pkgs/development/web/wml/redhat-with-thr.patch19
-rw-r--r--nixpkgs/pkgs/development/web/woff2/default.nix32
-rw-r--r--nixpkgs/pkgs/development/web/xmlindent/default.nix25
36 files changed, 6308 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/web/csslint/default.nix b/nixpkgs/pkgs/development/web/csslint/default.nix
new file mode 100644
index 000000000000..4159e3690490
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/csslint/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, nodejs }:
+
+stdenv.mkDerivation rec {
+  version = "0.10.0";
+  name = "csslint-${version}";
+
+  src = fetchurl {
+    url = "https://registry.npmjs.org/csslint/-/${name}.tgz";
+    sha256 = "1gq2x0pf2p4jhccvn3y3kjhm1lmb4jsfdbzjdh924w8m3sr9jdid";
+  };
+
+  # node is the interpreter used to run this script
+  buildInputs = [ nodejs ];
+
+  installPhase = ''
+    sed -i "s/path\.join/path\.resolve/g" cli.js # fixes csslint issue #167
+    mkdir -p $out/bin;
+    cp -r * $out/bin
+    mv $out/bin/cli.js $out/bin/csslint
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Checks CSS for syntax errors and other problems";
+    longDescription = ''
+      CSSLint is a tool to help point out problems with your CSS
+      code. It does basic syntax checking as well as applying a set of
+      rules to the code that look for problematic patterns or signs of
+      inefficiency. The rules are all pluggable, so you can easily
+      write your own or omit ones you don't want. '';
+    homepage = https://nodejs.org;
+    license = licenses.bsd2;
+    maintainers = [ maintainers.goibhniu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/web/grails/default.nix b/nixpkgs/pkgs/development/web/grails/default.nix
new file mode 100644
index 000000000000..018c7f969697
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/grails/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchurl, unzip
+# If jdk is null, require JAVA_HOME in runtime environment, else store
+# JAVA_HOME=${jdk.home} into grails.
+, jdk ? null
+, coreutils, ncurses, gnused, gnugrep  # for purity
+}:
+
+let
+  binpath = stdenv.lib.makeBinPath
+    ([ coreutils ncurses gnused gnugrep ] ++ stdenv.lib.optional (jdk != null) jdk);
+in
+stdenv.mkDerivation rec {
+  name = "grails-${version}";
+  version = "3.3.10";
+
+  src = fetchurl {
+    url = "https://github.com/grails/grails-core/releases/download/v${version}/grails-${version}.zip";
+    sha256 = "1lykawfi47c2k6lq4vrnghlz8gcnmqsslxsnaq4d2n78g0y3yyr2";
+  };
+
+  buildInputs = [ unzip ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p "$out"
+    cp -vr . "$out"
+    # Remove (for now) uneeded Windows .bat files
+    rm -f "$out"/bin/*.bat
+    # Improve purity
+    sed -i -e '2iPATH=${binpath}:\$PATH' "$out"/bin/grails
+  '' + stdenv.lib.optionalString (jdk != null) ''
+    # Inject JDK path into grails
+    sed -i -e '2iJAVA_HOME=${jdk.home}' "$out"/bin/grails
+  '';
+
+  preferLocalBuild = true;
+
+  meta = with stdenv.lib; {
+    description = "Full stack, web application framework for the JVM";
+    longDescription = ''
+      Grails is an Open Source, full stack, web application framework for the
+      JVM. It takes advantage of the Groovy programming language and convention
+      over configuration to provide a productive and stream-lined development
+      experience.
+    '';
+    homepage = https://grails.org/;
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/web/insomnia/default.nix b/nixpkgs/pkgs/development/web/insomnia/default.nix
new file mode 100644
index 000000000000..264f77a7fd95
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/insomnia/default.nix
@@ -0,0 +1,97 @@
+{ stdenv, makeWrapper, fetchurl, dpkg
+, alsaLib, atk, cairo, cups, dbus, expat, fontconfig, freetype
+, gdk_pixbuf, glib, gnome2, nspr, nss, gtk3, gtk2, at-spi2-atk
+, gsettings-desktop-schemas, gobject-introspection, wrapGAppsHook
+, libX11, libXScrnSaver, libXcomposite, libXcursor, libXdamage, libXext
+, libXfixes, libXi, libXrandr, libXrender, libXtst, libxcb, nghttp2
+, libudev0-shim, glibc, curl, openssl, autoPatchelfHook
+}:
+
+let
+  runtimeLibs = stdenv.lib.makeLibraryPath [
+    curl
+    glibc
+    libudev0-shim
+    nghttp2
+    openssl
+    stdenv.cc.cc
+  ];
+in stdenv.mkDerivation rec {
+  name = "insomnia-${version}";
+  version = "6.5.3";
+
+  src = fetchurl {
+    url = "https://github.com/getinsomnia/insomnia/releases/download/v${version}/insomnia_${version}_amd64.deb";
+    sha256 = "0km7anw5xpcfr6j7pwqhv26pk7nxv1jywqlz0lpvgj6w85aafcm3";
+  };
+
+  nativeBuildInputs = [ 
+    autoPatchelfHook
+    dpkg
+    makeWrapper
+    gobject-introspection wrapGAppsHook
+  ];
+  
+  buildInputs = [
+    alsaLib
+    at-spi2-atk
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk_pixbuf
+    glib
+    gnome2.GConf
+    gnome2.pango
+    gtk2
+    gtk3
+    gsettings-desktop-schemas
+    libX11
+    libXScrnSaver
+    libXcomposite
+    libXcursor
+    libXdamage
+    libXext
+    libXfixes
+    libXi
+    libXrandr
+    libXrender
+    libXtst
+    libxcb
+    nspr
+    nss
+    stdenv.cc.cc
+  ];
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  unpackPhase = "dpkg-deb -x $src .";
+
+  installPhase = ''
+    mkdir -p $out/share/insomnia $out/lib $out/bin
+
+    mv usr/share/* $out/share/
+    mv opt/Insomnia/* $out/share/insomnia
+    mv $out/share/insomnia/*.so $out/lib/
+
+    ln -s $out/share/insomnia/insomnia $out/bin/insomnia
+    sed -i 's|\/opt\/Insomnia|'$out'/bin|g' $out/share/applications/insomnia.desktop
+  '';
+
+  preFixup = ''
+    wrapProgram "$out/bin/insomnia" --prefix LD_LIBRARY_PATH : ${runtimeLibs}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://insomnia.rest/;
+    description = "The most intuitive cross-platform REST API Client";
+    license = licenses.mit;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ markus1189 ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/web/kcgi/default.nix b/nixpkgs/pkgs/development/web/kcgi/default.nix
new file mode 100644
index 000000000000..485c4026afae
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/kcgi/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, pkgconfig, fetchFromGitHub, libbsd }:
+
+stdenv.mkDerivation rec {
+  pname = "kcgi";
+  version = "0.10.8";
+  underscoreVersion = stdenv.lib.replaceChars ["."] ["_"] version;
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "kristapsdz";
+    repo = pname;
+    rev = "VERSION_${underscoreVersion}";
+    sha256 = "0ha6r7bcgf6pcn5gbd2sl7835givhda1jql49c232f1iair1yqyp";
+  };
+  patchPhase = ''substituteInPlace configure \
+    --replace /usr/local /
+  '';
+  
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ ] ++ stdenv.lib.optionals stdenv.isLinux [ libbsd ] ;
+
+  dontAddPrefix = true;
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://kristaps.bsd.lv/kcgi;
+    description = "Minimal CGI and FastCGI library for C/C++";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = [ maintainers.leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/web/kore/default.nix b/nixpkgs/pkgs/development/web/kore/default.nix
new file mode 100644
index 000000000000..a59db6d4d1ae
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/kore/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "kore";
+  version = "3.3.1";
+
+  src = fetchFromGitHub {
+    owner = "jorisvink";
+    repo = pname;
+    rev = "${version}-release";
+    sha256 = "0jlvry9p1f7284cscfsg04ngbaq038yx3nz815jcr5s3d2jzps3h";
+  };
+
+  buildInputs = [ openssl ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  # added to fix build w/gcc7 and clang5
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.cc.isGNU "-Wno-error=pointer-compare"
+    + stdenv.lib.optionalString stdenv.cc.isClang " -Wno-error=unknown-warning-option";
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "An easy to use web application framework for C";
+    homepage = https://kore.io;
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ johnmh ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/web/mailcatcher/Gemfile b/nixpkgs/pkgs/development/web/mailcatcher/Gemfile
new file mode 100644
index 000000000000..8cc16fad7e56
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/mailcatcher/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'mailcatcher'
diff --git a/nixpkgs/pkgs/development/web/mailcatcher/Gemfile.lock b/nixpkgs/pkgs/development/web/mailcatcher/Gemfile.lock
new file mode 100644
index 000000000000..560213897c91
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/mailcatcher/Gemfile.lock
@@ -0,0 +1,41 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    daemons (1.3.1)
+    eventmachine (1.0.9.1)
+    mail (2.7.1)
+      mini_mime (>= 0.1.1)
+    mailcatcher (0.7.1)
+      eventmachine (= 1.0.9.1)
+      mail (~> 2.3)
+      rack (~> 1.5)
+      sinatra (~> 1.2)
+      skinny (~> 0.2.3)
+      sqlite3 (~> 1.3)
+      thin (~> 1.5.0)
+    mini_mime (1.0.1)
+    rack (1.6.11)
+    rack-protection (1.5.5)
+      rack
+    sinatra (1.4.8)
+      rack (~> 1.5)
+      rack-protection (~> 1.4)
+      tilt (>= 1.3, < 3)
+    skinny (0.2.4)
+      eventmachine (~> 1.0.0)
+      thin (>= 1.5, < 1.7)
+    sqlite3 (1.4.0)
+    thin (1.5.1)
+      daemons (>= 1.0.9)
+      eventmachine (>= 0.12.6)
+      rack (>= 1.0.0)
+    tilt (2.0.9)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  mailcatcher
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/web/mailcatcher/default.nix b/nixpkgs/pkgs/development/web/mailcatcher/default.nix
new file mode 100644
index 000000000000..a2fa509232de
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/mailcatcher/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "mailcatcher";
+  gemdir = ./.;
+  exes = [ "mailcatcher" "catchmail" ];
+
+  meta = with lib; {
+    description = "SMTP server and web interface to locally test outbound emails";
+    homepage    = https://mailcatcher.me/;
+    license     = licenses.mit;
+    maintainers = [ maintainers.zarelit ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/web/mailcatcher/gemset.nix b/nixpkgs/pkgs/development/web/mailcatcher/gemset.nix
new file mode 100644
index 000000000000..7603e8ff2ef1
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/mailcatcher/gemset.nix
@@ -0,0 +1,128 @@
+{
+  daemons = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l5gai3vd4g7aqff0k1mp41j9zcsvm2rbwmqn115a325k9r7pf4w";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  eventmachine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17jr1caa3ggg696dd02g2zqzdjqj9x9q2nl7va82l36f7c5v6k4z";
+      type = "gem";
+    };
+    version = "1.0.9.1";
+  };
+  mail = {
+    dependencies = ["mini_mime"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  mailcatcher = {
+    dependencies = ["eventmachine" "mail" "rack" "sinatra" "skinny" "sqlite3" "thin"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02w1ycyfv7x0sh9799lz7xa65p5qvl5z4pa8a7prb68h2zwkfq0n";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  mini_mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q4pshq387lzv9m39jv32vwb8wrq3wc4jwgl4jk209r4l33v09d3";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g9926ln2lw12lfxm4ylq1h6nl0rafl10za3xvjzc87qvnqic87f";
+      type = "gem";
+    };
+    version = "1.6.11";
+  };
+  rack-protection = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0my0wlw4a5l3hs79jkx2xzv7djhajgf8d28k8ai1ddlnxxb0v7ss";
+      type = "gem";
+    };
+    version = "1.5.5";
+  };
+  sinatra = {
+    dependencies = ["rack" "rack-protection" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0byxzl7rx3ki0xd7aiv1x8mbah7hzd8f81l65nq8857kmgzj1jqq";
+      type = "gem";
+    };
+    version = "1.4.8";
+  };
+  skinny = {
+    dependencies = ["eventmachine" "thin"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y3yvx88ylgz4d2s1wskjk5rkmrcr15q3ibzp1q88qwzr5y493a9";
+      type = "gem";
+    };
+    version = "0.2.4";
+  };
+  sqlite3 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pmgpqx2sg8pms54rk7kjjy8jwsw21g1f7mb02fggbdcqy8jk3fx";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  thin = {
+    dependencies = ["daemons" "eventmachine" "rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hrq9m3hb6pm8yrqshhg0gafkphdpvwcqmr7k722kgdisp3w91ga";
+      type = "gem";
+    };
+    version = "1.5.1";
+  };
+  tilt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ca4k0clwf0rkvy7726x4nxpjxkpv67w043i39saxgldxd97zmwz";
+      type = "gem";
+    };
+    version = "2.0.9";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/web/minify/default.nix b/nixpkgs/pkgs/development/web/minify/default.nix
new file mode 100644
index 000000000000..76434809cb52
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/minify/default.nix
@@ -0,0 +1,24 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "minify";
+  version = "2.5.0";
+
+  goPackagePath = "github.com/tdewolff/minify";
+
+  src = fetchFromGitHub {
+    owner = "tdewolff";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1ja26fs7klzggmfqvz5nzj9icaa8r8h4a91qg8rj4gx5cnvwx38d";
+  };
+
+  modSha256 = "0kff2nj66bifbfi8srcvcsipbddw43mvjdwlq0lz04qak524pbvr";
+
+  meta = with lib; {
+    description = "Minifiers for web formats";
+    license = licenses.mit;
+    homepage = https://go.tacodewolff.nl/minify;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/web/nodejs/build-node-package.nix b/nixpkgs/pkgs/development/web/nodejs/build-node-package.nix
new file mode 100644
index 000000000000..5ce324e7a60f
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/nodejs/build-node-package.nix
@@ -0,0 +1,333 @@
+{ stdenv, runCommand, nodejs, neededNatives}:
+
+{
+  name, version ? "", src,
+
+  # by default name of nodejs interpreter e.g. "nodejs-${name}"
+  namePrefix ? nodejs.interpreterName + "-",
+
+  # Node package name
+  pkgName ?
+    if version != "" then stdenv.lib.removeSuffix "-${version}" name else
+    (builtins.parseDrvName name).name,
+
+  # List or attribute set of dependencies
+  deps ? {},
+
+  # List or attribute set of peer depencies
+  peerDependencies ? {},
+
+  # List or attribute set of optional dependencies
+  optionalDependencies ? {},
+
+  # List of optional dependencies to skip
+  skipOptionalDependencies ? [],
+
+  # Whether package is binary or library
+  bin ? false,
+
+  # Additional flags passed to npm install
+  flags ? "",
+
+  # Command to be run before shell hook
+  preShellHook ? "",
+
+  # Command to be run after shell hook
+  postShellHook ? "",
+
+  # Same as https://docs.npmjs.com/files/package.json#os
+  os ? [],
+
+  # Same as https://docs.npmjs.com/files/package.json#cpu
+  cpu ? [],
+
+  # Attribute set of already resolved deps (internal),
+  # for avoiding infinite recursion
+  resolvedDeps ? {},
+
+  ...
+} @ args:
+
+with stdenv.lib;
+
+let
+  self = let
+    sources = runCommand "node-sources" {} ''
+      tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
+      mv $(find . -type d -mindepth 1 -maxdepth 1) $out
+    '';
+
+    platforms = if os == [] then nodejs.meta.platforms else
+      fold (entry: platforms:
+        let
+          filterPlatforms =
+            stdenv.lib.platforms.${removePrefix "!" entry} or [];
+        in
+          # Ignore unknown platforms
+          if filterPlatforms == [] then (if platforms == [] then nodejs.meta.platforms else platforms)
+          else
+            if hasPrefix "!" entry then
+              subtractLists (intersectLists filterPlatforms nodejs.meta.platforms) platforms
+            else
+              platforms ++ (intersectLists filterPlatforms nodejs.meta.platforms)
+      ) [] os;
+
+    mapDependencies = deps: f: rec {
+      # Convert deps to attribute set
+      attrDeps = if isAttrs deps then deps else
+        (listToAttrs (map (dep: nameValuePair dep.name dep) deps));
+
+      # All required node modules, without already resolved dependencies
+      # Also override with already resolved dependencies
+      requiredDeps = mapAttrs (name: dep:
+        dep.override {
+          resolvedDeps = resolvedDeps // { "${name}" = self; };
+        }
+      ) (filterAttrs f (removeAttrs attrDeps (attrNames resolvedDeps)));
+
+      # Recursive dependencies that we want to avoid with shim creation
+      recursiveDeps = filterAttrs f (removeAttrs attrDeps (attrNames requiredDeps));
+    };
+
+    _dependencies = mapDependencies deps (name: dep:
+      dep.pkgName != pkgName);
+    _optionalDependencies = mapDependencies optionalDependencies (name: dep:
+      (builtins.tryEval dep).success &&
+      !(elem dep.pkgName skipOptionalDependencies)
+    );
+    _peerDependencies = mapDependencies peerDependencies (name: dep:
+      dep.pkgName != pkgName);
+
+    requiredDependencies =
+      _dependencies.requiredDeps //
+      _optionalDependencies.requiredDeps //
+      _peerDependencies.requiredDeps;
+
+    recursiveDependencies =
+      _dependencies.recursiveDeps //
+      _optionalDependencies.recursiveDeps //
+      _peerDependencies.recursiveDeps;
+
+    patchShebangs = dir: ''
+      node=`type -p node`
+      coffee=`type -p coffee || true`
+      find -L ${dir} -type f -print0 | xargs -0 grep -Il . | \
+      xargs sed --follow-symlinks -i \
+          -e 's@#!/usr/bin/env node@#!'"$node"'@' \
+          -e 's@#!/usr/bin/env coffee@#!'"$coffee"'@' \
+          -e 's@#!/.*/node@#!'"$node"'@' \
+          -e 's@#!/.*/coffee@#!'"$coffee"'@' || true
+    '';
+
+  in stdenv.mkDerivation ({
+    inherit src;
+
+    configurePhase = ''
+      runHook preConfigure
+
+      ${patchShebangs "./"}
+
+      # Some version specifiers (latest, unstable, URLs, file paths) force NPM
+      # to make remote connections or consult paths outside the Nix store.
+      # The following JavaScript replaces these by * to prevent that:
+      # Also some packages require a specific npm version because npm may
+      # resovle dependencies differently, but npm is not used by Nix for dependency
+      # reslution, so these requirements are dropped.
+
+      (
+      cat <<EOF
+        var fs = require('fs');
+        var url = require('url');
+
+        /*
+        * Replaces an impure version specification by *
+        */
+        function replaceImpureVersionSpec(versionSpec) {
+            var parsedUrl = url.parse(versionSpec);
+
+            if(versionSpec == "" || versionSpec == "latest" || versionSpec == "unstable" ||
+                versionSpec.substr(0, 2) == ".." || dependency.substr(0, 2) == "./" || dependency.substr(0, 2) == "~/" || dependency.substr(0, 1) == '/' || /^[^/]+\/[^/]+$/.test(versionSpec))
+                return '*';
+            else if(parsedUrl.protocol == "git:" || parsedUrl.protocol == "git+ssh:" || parsedUrl.protocol == "git+http:" || parsedUrl.protocol == "git+https:" ||
+                parsedUrl.protocol == "http:" || parsedUrl.protocol == "https:")
+                return '*';
+            else
+                return versionSpec;
+        }
+
+        var packageObj = JSON.parse(fs.readFileSync('./package.json'));
+
+        /* Replace dependencies */
+        if(packageObj.dependencies !== undefined) {
+            for(var dependency in packageObj.dependencies) {
+                var versionSpec = packageObj.dependencies[dependency];
+                packageObj.dependencies[dependency] = replaceImpureVersionSpec(versionSpec);
+            }
+        }
+
+        /* Replace development dependencies */
+        if(packageObj.devDependencies !== undefined) {
+            for(var dependency in packageObj.devDependencies) {
+                var versionSpec = packageObj.devDependencies[dependency];
+                packageObj.devDependencies[dependency] = replaceImpureVersionSpec(versionSpec);
+            }
+        }
+
+        /* Replace optional dependencies */
+        if(packageObj.optionalDependencies !== undefined) {
+            for(var dependency in packageObj.optionalDependencies) {
+                var versionSpec = packageObj.optionalDependencies[dependency];
+                packageObj.optionalDependencies[dependency] = replaceImpureVersionSpec(versionSpec);
+            }
+        }
+
+        /* Ignore npm version requirement */
+        if(packageObj.engines) {
+            delete packageObj.engines.npm;
+        }
+
+        /* Write the fixed JSON file */
+        fs.writeFileSync("package.json", JSON.stringify(packageObj));
+      EOF
+      ) | node
+
+      # We do not handle shrinkwraps yet
+      rm npm-shrinkwrap.json 2>/dev/null || true
+
+      mkdir ../build-dir
+      (
+        cd ../build-dir
+        mkdir node_modules
+
+        # Symlink or copy dependencies for node modules
+        # copy is needed if dependency has recursive dependencies,
+        # because node can't follow symlinks while resolving recursive deps.
+        ${concatMapStrings (dep:
+          if dep.recursiveDeps == [] then ''
+            ln -sv ${dep}/lib/node_modules/${dep.pkgName} node_modules/
+          '' else ''
+            cp -R ${dep}/lib/node_modules/${dep.pkgName} node_modules/
+          ''
+        ) (attrValues requiredDependencies)}
+
+        # Create shims for recursive dependenceies
+        ${concatMapStrings (dep: ''
+          mkdir -p node_modules/${dep.pkgName}
+          cat > node_modules/${dep.pkgName}/package.json <<EOF
+          {
+              "name": "${dep.pkgName}",
+              "version": "${getVersion dep}"
+          }
+          EOF
+        '') (attrValues recursiveDependencies)}
+      )
+
+      export HOME=$PWD/../build-dir
+      runHook postConfigure
+    '';
+
+    buildPhase = ''
+      runHook preBuild
+
+      # If source was a file, repackage it, so npm pre/post publish hooks are not triggered,
+      if [[ -f $src ]]; then
+        GZIP=-1 tar -czf ../build-dir/package.tgz ./
+        export src=$HOME/package.tgz
+      else
+        export src=$PWD
+      fi
+
+      # Install package
+      (cd $HOME && npm --registry http://www.example.com --nodedir=${sources} install $src --fetch-retries 0 ${flags})
+
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      runHook preInstall
+
+      (
+        cd $HOME
+
+        # Remove shims
+        ${concatMapStrings (dep: ''
+          rm node_modules/${dep.pkgName}/package.json
+          rmdir node_modules/${dep.pkgName}
+        '') (attrValues recursiveDependencies)}
+
+        mkdir -p $out/lib/node_modules
+
+        # Install manual
+        mv node_modules/${pkgName} $out/lib/node_modules
+        rm -fR $out/lib/node_modules/${pkgName}/node_modules
+        cp -r node_modules $out/lib/node_modules/${pkgName}/node_modules
+
+        if [ -e "$out/lib/node_modules/${pkgName}/man" ]; then
+          mkdir -p $out/share
+          for dir in "$out/lib/node_modules/${pkgName}/man/"*; do
+            mkdir -p $out/share/man/$(basename "$dir")
+            for page in "$dir"/*; do
+              ln -sv $page $out/share/man/$(basename "$dir")
+            done
+          done
+        fi
+
+        # Move peer dependencies to node_modules
+        ${concatMapStrings (dep: ''
+          mv node_modules/${dep.pkgName} $out/lib/node_modules
+        '') (attrValues _peerDependencies.requiredDeps)}
+
+        # Install binaries and patch shebangs
+        mv node_modules/.bin $out/lib/node_modules 2>/dev/null || true
+        if [ -d "$out/lib/node_modules/.bin" ]; then
+          ln -sv $out/lib/node_modules/.bin $out/bin
+          ${patchShebangs "$out/lib/node_modules/.bin/*"}
+        fi
+      )
+
+      runHook postInstall
+    '';
+
+    preFixup = ''
+      find $out -type f -print0 | xargs -0 sed -i 's|${src}|${src.name}|g'
+    '';
+
+    shellHook = ''
+      ${preShellHook}
+      export PATH=${nodejs}/bin:$(pwd)/node_modules/.bin:$PATH
+      mkdir -p node_modules
+      ${concatMapStrings (dep: ''
+        ln -sfv ${dep}/lib/node_modules/${dep.pkgName} node_modules/
+      '') (attrValues requiredDependencies)}
+      ${postShellHook}
+    '';
+
+    # Stipping does not make a lot of sense in node packages
+    dontStrip = true;
+
+    meta = {
+      inherit platforms;
+      maintainers = [ stdenv.lib.maintainers.offline ];
+    };
+
+    passthru.pkgName = pkgName;
+  } // (filterAttrs (n: v: all (k: n != k) ["deps" "resolvedDeps" "optionalDependencies"]) args) // {
+    name = namePrefix + name;
+
+    # Run the node setup hook when this package is a build input
+    propagatedNativeBuildInputs = (args.propagatedNativeBuildInputs or []) ++ [ nodejs ];
+
+    nativeBuildInputs =
+      (args.nativeBuildInputs or []) ++ neededNatives ++
+      (attrValues requiredDependencies);
+
+    # Expose list of recursive dependencies upstream, up to the package that
+    # caused recursive dependency
+    recursiveDeps =
+      (flatten (
+        map (dep: remove name dep.recursiveDeps) (attrValues requiredDependencies)
+      )) ++
+      (attrNames recursiveDependencies);
+  });
+
+in self
diff --git a/nixpkgs/pkgs/development/web/nodejs/nodejs-release-keys.asc b/nixpkgs/pkgs/development/web/nodejs/nodejs-release-keys.asc
new file mode 100644
index 000000000000..c89b3b37f876
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/nodejs/nodejs-release-keys.asc
@@ -0,0 +1,776 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=jVEm
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/nixpkgs/pkgs/development/web/nodejs/nodejs.nix b/nixpkgs/pkgs/development/web/nodejs/nodejs.nix
new file mode 100644
index 000000000000..6dc68750075c
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/nodejs/nodejs.nix
@@ -0,0 +1,131 @@
+{ stdenv, fetchurl, openssl, python2, zlib, libuv, utillinux, http-parser
+, pkgconfig, which
+# Updater dependencies
+, writeScript, coreutils, gnugrep, jq, curl, common-updater-scripts, nix, runtimeShell
+, gnupg
+, darwin, xcbuild
+, procps, icu
+}:
+
+with stdenv.lib;
+
+{ enableNpm ? true, version, sha256, patches ? [] } @args:
+
+let
+  inherit (darwin.apple_sdk.frameworks) CoreServices ApplicationServices;
+
+  majorVersion = versions.major version;
+  minorVersion = versions.minor version;
+
+  baseName = if enableNpm then "nodejs" else "nodejs-slim";
+
+  useSharedHttpParser = !stdenv.isDarwin && versionOlder "${majorVersion}.${minorVersion}" "11.4";
+
+  sharedLibDeps = { inherit openssl zlib libuv; } // (optionalAttrs useSharedHttpParser { inherit http-parser; });
+
+  sharedConfigureFlags = concatMap (name: [
+    "--shared-${name}"
+    "--shared-${name}-libpath=${getLib sharedLibDeps.${name}}/lib"
+    /** Closure notes: we explicitly avoid specifying --shared-*-includes,
+     *  as that would put the paths into bin/nodejs.
+     *  Including pkgconfig in build inputs would also have the same effect!
+     */
+  ]) (builtins.attrNames sharedLibDeps) ++ [
+    "--with-intl=system-icu"
+  ];
+
+  copyLibHeaders =
+    map
+      (name: "${getDev sharedLibDeps.${name}}/include/*")
+      (builtins.attrNames sharedLibDeps);
+
+  extraConfigFlags = optionals (!enableNpm) [ "--without-npm" ];
+in
+
+  stdenv.mkDerivation {
+    inherit version;
+
+    name = "${baseName}-${version}";
+
+    src = fetchurl {
+      url = "https://nodejs.org/dist/v${version}/node-v${version}.tar.xz";
+      inherit sha256;
+    };
+
+    buildInputs = optionals stdenv.isDarwin [ CoreServices ApplicationServices ]
+      ++ [ python2 zlib libuv openssl http-parser icu ];
+
+    nativeBuildInputs = [ which utillinux pkgconfig ]
+      ++ optionals stdenv.isDarwin [ xcbuild ];
+
+    configureFlags = sharedConfigureFlags ++ [ "--without-dtrace" ] ++ extraConfigFlags;
+
+    dontDisableStatic = true;
+
+    enableParallelBuilding = true;
+
+    passthru.interpreterName = "nodejs";
+
+    setupHook = ./setup-hook.sh;
+
+    pos = builtins.unsafeGetAttrPos "version" args;
+
+    inherit patches;
+
+    postPatch = ''
+      patchShebangs .
+
+      # fix tests
+      for a in test/parallel/test-child-process-env.js \
+               test/parallel/test-child-process-exec-env.js \
+               test/parallel/test-child-process-default-options.js \
+               test/fixtures/syntax/good_syntax_shebang.js \
+               test/fixtures/syntax/bad_syntax_shebang.js ; do
+        substituteInPlace $a \
+          --replace "/usr/bin/env" "${coreutils}/bin/env"
+      done
+    '' + optionalString stdenv.isDarwin ''
+      sed -i 's/raise.*No Xcode or CLT version detected.*/version = "7.0.0"/' tools/gyp/pylib/gyp/xcode_emulation.py
+      sed -i -e "s|tr1/type_traits|type_traits|g" \
+             -e "s|std::tr1|std|" src/util.h
+    '';
+
+    checkInputs = [ procps ];
+    doCheck = false; # fails 4 out of 1453 tests
+
+    postInstall = ''
+      PATH=$out/bin:$PATH patchShebangs $out
+
+      ${optionalString enableNpm ''
+        mkdir -p $out/share/bash-completion/completions/
+        $out/bin/npm completion > $out/share/bash-completion/completions/npm
+        for dir in "$out/lib/node_modules/npm/man/"*; do
+          mkdir -p $out/share/man/$(basename "$dir")
+          for page in "$dir"/*; do
+            ln -rs $page $out/share/man/$(basename "$dir")
+          done
+        done
+      ''}
+
+      # install the missing headers for node-gyp
+      cp -r ${concatStringsSep " " copyLibHeaders} $out/include/node
+    '' + optionalString (stdenv.isDarwin && enableNpm) ''
+      sed -i 's/raise.*No Xcode or CLT version detected.*/version = "7.0.0"/' $out/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
+    '';
+
+    passthru.updateScript = import ./update.nix {
+      inherit writeScript coreutils gnugrep jq curl common-updater-scripts gnupg nix runtimeShell;
+      inherit (stdenv) lib;
+      inherit majorVersion;
+    };
+
+    meta = {
+      description = "Event-driven I/O framework for the V8 JavaScript engine";
+      homepage = https://nodejs.org;
+      license = licenses.mit;
+      maintainers = with maintainers; [ goibhniu gilligan cko ];
+      platforms = platforms.linux ++ platforms.darwin;
+    };
+
+    passthru.python = python2; # to ensure nodeEnv uses the same version
+}
diff --git a/nixpkgs/pkgs/development/web/nodejs/setup-hook.sh b/nixpkgs/pkgs/development/web/nodejs/setup-hook.sh
new file mode 100644
index 000000000000..18368588c2af
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/nodejs/setup-hook.sh
@@ -0,0 +1,5 @@
+addNodePath () {
+    addToSearchPath NODE_PATH $1/lib/node_modules
+}
+
+addEnvHooks "$hostOffset" addNodePath
diff --git a/nixpkgs/pkgs/development/web/nodejs/update-keyring b/nixpkgs/pkgs/development/web/nodejs/update-keyring
new file mode 100755
index 000000000000..39737758e765
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/nodejs/update-keyring
@@ -0,0 +1,18 @@
+#!/usr/bin/env nix-shell
+#! nix-shell --pure -i bash -p coreutils findutils gnupg curl
+
+# https://github.com/nodejs/node#release-team
+HOME=`mktemp -d`
+keyserver="pool.sks-keyservers.net"
+cat << EOF | xargs -P 4 -n 1 gpg --keyserver $keyserver --recv-keys
+94AE36675C464D64BAFA68DD7434390BDBE9B9C5
+FD3A5288F042B6850C66B31F09FE44734EB7990E
+71DCFD284A79C3B38668286BC97EC7A07EDE3FC1
+DD8F2338BAE7501E3DD5AC78C273792F7D83545D
+C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8
+B9AE9905FFD7803F25714661B63B535A4C206CA9
+56730D5401028683275BD23C23EFEFE93C4CFFFE
+77984A986EBC2AA786BC0F66B01FBB92821C587A
+EOF
+
+gpg -a --export > nodejs-release-keys.asc
diff --git a/nixpkgs/pkgs/development/web/nodejs/update.nix b/nixpkgs/pkgs/development/web/nodejs/update.nix
new file mode 100644
index 000000000000..47e1abc9b217
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/nodejs/update.nix
@@ -0,0 +1,29 @@
+{ lib
+, writeScript
+, coreutils
+, curl
+, gnugrep
+, jq
+, gnupg
+, common-updater-scripts
+, majorVersion
+, nix
+, runtimeShell
+}:
+
+writeScript "update-nodejs" ''
+  #!${runtimeShell}
+  PATH=${lib.makeBinPath [ common-updater-scripts coreutils curl gnugrep jq gnupg nix ]}
+
+  HOME=`mktemp -d`
+  cat ${./nodejs-release-keys.asc} | gpg --import
+
+  tags=`curl --silent https://api.github.com/repos/nodejs/node/git/refs/tags`
+  version=`echo $tags | jq -r '.[] | select(.ref | startswith("refs/tags/v${majorVersion}")) | .ref' | sort --version-sort  | tail -1 | grep -oP "^refs/tags/v\K.*"`
+
+  curl --silent -o $HOME/SHASUMS256.txt.asc https://nodejs.org/dist/v''${version}/SHASUMS256.txt.asc
+  hash_hex=`gpgv --keyring=$HOME/.gnupg/pubring.kbx --output - $HOME/SHASUMS256.txt.asc | grep -oP "^([0-9a-f]{64})(?=\s+node-v''${version}.tar.xz$)"`
+  hash=`nix-hash --type sha256 --to-base32 ''${hash_hex}`
+
+  update-source-version nodejs-${majorVersion}_x "''${version}" "''${hash}"
+''
diff --git a/nixpkgs/pkgs/development/web/nodejs/v10.nix b/nixpkgs/pkgs/development/web/nodejs/v10.nix
new file mode 100644
index 000000000000..5743868d5d96
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/nodejs/v10.nix
@@ -0,0 +1,10 @@
+{ callPackage, openssl, enableNpm ? true }:
+
+let
+  buildNodejs = callPackage ./nodejs.nix { inherit openssl; };
+in
+  buildNodejs {
+    inherit enableNpm;
+    version = "10.16.0";
+    sha256 = "0236jlb1hxhzqjlmmlxipcycrndiq92c8434iyy7zshh3n4pzqqq";
+  }
diff --git a/nixpkgs/pkgs/development/web/nodejs/v11.nix b/nixpkgs/pkgs/development/web/nodejs/v11.nix
new file mode 100644
index 000000000000..7b60a3772d3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/nodejs/v11.nix
@@ -0,0 +1,10 @@
+{ callPackage, openssl, enableNpm ? true }:
+
+let
+  buildNodejs = callPackage ./nodejs.nix { inherit openssl; };
+in
+  buildNodejs {
+    inherit enableNpm;
+    version = "11.15.0";
+    sha256 = "68a776c5d8b8b91a8f2adac2ca4ce4390ae1804883ec7ec9c0d6a6a64d306a76";
+  }
diff --git a/nixpkgs/pkgs/development/web/nodejs/v12.nix b/nixpkgs/pkgs/development/web/nodejs/v12.nix
new file mode 100644
index 000000000000..ae74764384c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/nodejs/v12.nix
@@ -0,0 +1,10 @@
+{ callPackage, openssl, icu, enableNpm ? true }:
+
+let
+  buildNodejs = callPackage ./nodejs.nix { inherit openssl icu; };
+in
+  buildNodejs {
+    inherit enableNpm;
+    version = "12.5.0";
+    sha256 = "08haqs104lw44l92bxfii18sdn7y1k07cz3p0ni9bhw7kh4vf5c7";
+  }
diff --git a/nixpkgs/pkgs/development/web/nodejs/v8.nix b/nixpkgs/pkgs/development/web/nodejs/v8.nix
new file mode 100644
index 000000000000..90d88215d3fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/nodejs/v8.nix
@@ -0,0 +1,10 @@
+{ callPackage, enableNpm ? true }:
+
+let
+  buildNodejs = callPackage ./nodejs.nix {};
+in
+  buildNodejs {
+    inherit enableNpm;
+    version = "8.16.0";
+    sha256 = "0h3k5y51fyysqnqb8n5v5zxga937pipag49xzx6xr9b82phfh59m";
+  }
diff --git a/nixpkgs/pkgs/development/web/now-cli/default.nix b/nixpkgs/pkgs/development/web/now-cli/default.nix
new file mode 100644
index 000000000000..4b8a79c6190b
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/now-cli/default.nix
@@ -0,0 +1,87 @@
+{ stdenv, lib, fetchurl }:
+stdenv.mkDerivation rec {
+  name = "now-cli-${version}";
+  version = "15.5.0";
+
+  # TODO: switch to building from source, if possible
+  src = fetchurl {
+    url = "https://github.com/zeit/now-cli/releases/download/${version}/now-linux.gz";
+    sha256 = "06fs3f5r6ixzzl1bhs92w3lcmpyx8fkga4bv8n9g0ygfm9d1z8gk";
+  };
+
+  sourceRoot = ".";
+  unpackCmd = ''
+    gunzip -c $curSrc > now-linux
+  '';
+
+  buildPhase = ":";
+
+  installPhase = ''
+    mkdir $out
+    mkdir $out/bin
+    cp now-linux $out/bin/now
+  '';
+
+    # now is a node program packaged using zeit/pkg.
+    # thus, it contains hardcoded offsets.
+    # patchelf shifts these locations when it expands headers.
+
+    # this could probably be generalised into allowing any program packaged
+    # with zeit/pkg to be run on nixos.
+
+  preFixup = let
+    libPath = lib.makeLibraryPath [stdenv.cc.cc];
+  in ''
+
+    orig_size=$(stat --printf=%s $out/bin/now)
+
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/bin/now
+    patchelf --set-rpath ${libPath} $out/bin/now
+    chmod +x $out/bin/now
+
+    new_size=$(stat --printf=%s $out/bin/now)
+
+    ###### zeit-pkg fixing starts here.
+    # we're replacing plaintext js code that looks like
+    # PAYLOAD_POSITION = '1234                  ' | 0
+    # [...]
+    # PRELUDE_POSITION = '1234                  ' | 0
+    # ^-----20-chars-----^^------22-chars------^
+    # ^-- grep points here
+    #
+    # var_* are as described above
+    # shift_by seems to be safe so long as all patchelf adjustments occur
+    # before any locations pointed to by hardcoded offsets
+
+    var_skip=20
+    var_select=22
+    shift_by=$(expr $new_size - $orig_size)
+
+    function fix_offset {
+      # $1 = name of variable to adjust
+      location=$(grep -obUam1 "$1" $out/bin/now | cut -d: -f1)
+      location=$(expr $location + $var_skip)
+
+      value=$(dd if=$out/bin/now iflag=count_bytes,skip_bytes skip=$location \
+                 bs=1 count=$var_select status=none)
+      value=$(expr $shift_by + $value)
+
+      echo -n $value | dd of=$out/bin/now bs=1 seek=$location conv=notrunc
+    }
+
+    fix_offset PAYLOAD_POSITION
+    fix_offset PRELUDE_POSITION
+
+  '';
+  dontStrip = true;
+
+
+
+  meta = with stdenv.lib; {
+    homepage = https://zeit.co/now;
+    description = "The Command Line Interface for Now - Global Serverless Deployments";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bhall ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/web/postman/default.nix b/nixpkgs/pkgs/development/web/postman/default.nix
new file mode 100644
index 000000000000..a09a84e4bf75
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/postman/default.nix
@@ -0,0 +1,97 @@
+{ stdenv, lib, gnome2, fetchurl, pkgs, xorg, makeWrapper, makeDesktopItem }:
+
+stdenv.mkDerivation rec {
+  name = "postman-${version}";
+  version = "7.0.7";
+
+  src = fetchurl {
+    url = "https://dl.pstmn.io/download/version/${version}/linux64";
+    sha256 = "47be1b955759520f3a2c7dcdecb85b4c52c38df717da294ba184f46f2058014a";
+    name = "${name}.tar.gz";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontPatchELF = true;
+
+  buildPhase = ":";   # nothing to build
+
+  desktopItem = makeDesktopItem {
+    name = "postman";
+    exec = "postman";
+    icon = "postman";
+    comment = "API Development Environment";
+    desktopName = "Postman";
+    genericName = "Postman";
+    categories = "Application;Development;";
+  };
+
+  installPhase = ''
+    mkdir -p $out/share/postman
+    cp -R app/* $out/share/postman
+
+    mkdir -p $out/bin
+    ln -s $out/share/postman/Postman $out/bin/postman
+
+    mkdir -p $out/share/applications
+    ln -s ${desktopItem}/share/applications/* $out/share/applications/
+
+    iconRootDir=$out/share/icons
+    iconSizeDir=$out/share/icons/hicolor/128x128/apps
+    mkdir -p $iconSizeDir
+    ln -s $out/share/postman/resources/app/assets/icon.png $iconRootDir/postman.png
+    ln -s $out/share/postman/resources/app/assets/icon.png $iconSizeDir/postman.png
+  '';
+
+  preFixup = let
+    libPath = lib.makeLibraryPath [
+      stdenv.cc.cc.lib
+      gnome2.pango
+      gnome2.GConf
+      pkgs.atk
+      pkgs.alsaLib
+      pkgs.cairo
+      pkgs.cups
+      pkgs.dbus.daemon.lib
+      pkgs.expat
+      pkgs.gdk_pixbuf
+      pkgs.glib
+      pkgs.gtk2-x11
+      pkgs.freetype
+      pkgs.fontconfig
+      pkgs.nss
+      pkgs.nspr
+      pkgs.udev.lib
+      xorg.libX11
+      xorg.libxcb
+      xorg.libXi
+      xorg.libXcursor
+      xorg.libXdamage
+      xorg.libXrandr
+      xorg.libXcomposite
+      xorg.libXext
+      xorg.libXfixes
+      xorg.libXrender
+      xorg.libX11
+      xorg.libXtst
+      xorg.libXScrnSaver
+    ];
+  in ''
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${libPath}:$out/share/postman" \
+      $out/share/postman/Postman
+    patchelf --set-rpath "${libPath}" $out/share/postman/libnode.so
+    patchelf --set-rpath "${libPath}" $out/share/postman/libffmpeg.so
+
+    wrapProgram $out/share/postman/Postman --prefix LD_LIBRARY_PATH : ${libPath}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.getpostman.com;
+    description = "API Development Environment";
+    license = stdenv.lib.licenses.postman;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ xurei ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/web/remarkjs/default.nix b/nixpkgs/pkgs/development/web/remarkjs/default.nix
new file mode 100644
index 000000000000..22404481f35c
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/remarkjs/default.nix
@@ -0,0 +1,70 @@
+{ stdenv, lib, fetchgit, fetchurl, nodejs, phantomjs2, pkgs }:
+
+with lib;
+
+let
+
+  # highlight.js is a git submodule of remark
+  highlightjs = fetchgit {
+    url = https://github.com/isagalaev/highlight.js;
+    rev = "10b9500b67983f0a9c42d8ce8bf8e8c469f7078c";
+    sha256 = "1yy8by15kfklw8lwh17z1swpj067q0skjjih12yawbryraig41m0";
+  };
+  
+  nodePackages = import ./nodepkgs.nix {
+    inherit pkgs;
+    inherit (stdenv.hostPlatform) system;
+  };
+
+in stdenv.mkDerivation rec {
+  name = "remarkjs-${version}";
+
+  version = "0.7.0";
+
+  src = fetchurl {
+    url = "https://github.com/gnab/remark/archive/v${version}.tar.gz";
+    sha256 = "1a2il6aa0g9cnig56ykmq8lr626pbxlsllk6js41h6gcn214rw60";
+  };
+
+  buildInputs = [ nodejs phantomjs2 ] ++ (with nodePackages; [
+    marked
+    browserify
+    uglify-js
+    less
+    mocha
+    #mocha-phantomjs
+    should
+    sinon
+    jshint
+    shelljs
+  ]);
+
+  configurePhase = ''
+    mkdir -p node_modules/.bin
+    ${concatStrings (map (dep: ''
+      test -d ${dep}/bin && (for b in $(ls ${dep}/bin); do
+        ln -sv -t node_modules/.bin ${dep}/bin/$b
+      done)
+    '') buildInputs)}
+  '';
+
+  buildPhase = ''
+    substituteInPlace make.js --replace "target.test();" ""
+    substituteInPlace make.js --replace vendor/highlight.js ${highlightjs}
+    node make all
+  '';
+
+  installPhase = ''
+    mkdir -p $out/lib
+    cp -v out/* $out/lib/
+  '';
+
+  meta = {
+    homepage = http://remarkjs.com;
+    description = "A simple, in-browser, markdown-driven slideshow tool";
+    maintainers = [ stdenv.lib.maintainers.rickynils ];
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.mit;
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/development/web/remarkjs/generate.sh b/nixpkgs/pkgs/development/web/remarkjs/generate.sh
new file mode 100644
index 000000000000..59542101812f
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/remarkjs/generate.sh
@@ -0,0 +1,3 @@
+#!/bin/sh -e
+
+node2nix -8 -i pkgs.json -c nodepkgs.nix -e ../../node-packages/node-env.nix
diff --git a/nixpkgs/pkgs/development/web/remarkjs/node-packages.nix b/nixpkgs/pkgs/development/web/remarkjs/node-packages.nix
new file mode 100644
index 000000000000..12282d4ea3ac
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/remarkjs/node-packages.nix
@@ -0,0 +1,3994 @@
+# This file has been generated by node2nix 1.7.0. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
+
+let
+  sources = {
+    "@sinonjs/commons-1.4.0" = {
+      name = "_at_sinonjs_slash_commons";
+      packageName = "@sinonjs/commons";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.4.0.tgz";
+        sha512 = "9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw==";
+      };
+    };
+    "@sinonjs/formatio-3.2.1" = {
+      name = "_at_sinonjs_slash_formatio";
+      packageName = "@sinonjs/formatio";
+      version = "3.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.1.tgz";
+        sha512 = "tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ==";
+      };
+    };
+    "@sinonjs/samsam-3.3.1" = {
+      name = "_at_sinonjs_slash_samsam";
+      packageName = "@sinonjs/samsam";
+      version = "3.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.1.tgz";
+        sha512 = "wRSfmyd81swH0hA1bxJZJ57xr22kC07a1N4zuIL47yTS04bDk6AoCkczcqHEjcRPmJ+FruGJ9WBQiJwMtIElFw==";
+      };
+    };
+    "@sinonjs/text-encoding-0.7.1" = {
+      name = "_at_sinonjs_slash_text-encoding";
+      packageName = "@sinonjs/text-encoding";
+      version = "0.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz";
+        sha512 = "+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==";
+      };
+    };
+    "JSONStream-1.3.5" = {
+      name = "JSONStream";
+      packageName = "JSONStream";
+      version = "1.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz";
+        sha512 = "E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==";
+      };
+    };
+    "abbrev-1.1.1" = {
+      name = "abbrev";
+      packageName = "abbrev";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz";
+        sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==";
+      };
+    };
+    "acorn-6.1.1" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "6.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz";
+        sha512 = "jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==";
+      };
+    };
+    "acorn-dynamic-import-4.0.0" = {
+      name = "acorn-dynamic-import";
+      packageName = "acorn-dynamic-import";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz";
+        sha512 = "d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==";
+      };
+    };
+    "acorn-node-1.7.0" = {
+      name = "acorn-node";
+      packageName = "acorn-node";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-node/-/acorn-node-1.7.0.tgz";
+        sha512 = "XhahLSsCB6X6CJbe+uNu3Mn9sJBNFxtBN9NLgAOQovfS6Kh0lDUtmlclhjn9CvEK7A7YyRU13PXlNcpSiLI9Yw==";
+      };
+    };
+    "acorn-walk-6.1.1" = {
+      name = "acorn-walk";
+      packageName = "acorn-walk";
+      version = "6.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz";
+        sha512 = "OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==";
+      };
+    };
+    "adm-zip-0.2.1" = {
+      name = "adm-zip";
+      packageName = "adm-zip";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/adm-zip/-/adm-zip-0.2.1.tgz";
+        sha1 = "e801cedeb5bd9a4e98d699c5c0f4239e2731dcbf";
+      };
+    };
+    "ajv-6.10.0" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "6.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz";
+        sha512 = "nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==";
+      };
+    };
+    "ansi-colors-3.2.3" = {
+      name = "ansi-colors";
+      packageName = "ansi-colors";
+      version = "3.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz";
+        sha512 = "LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==";
+      };
+    };
+    "ansi-regex-2.1.1" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
+        sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
+      };
+    };
+    "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-4.1.0" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz";
+        sha512 = "1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==";
+      };
+    };
+    "ansi-styles-3.2.1" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "3.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz";
+        sha512 = "VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==";
+      };
+    };
+    "argparse-1.0.10" = {
+      name = "argparse";
+      packageName = "argparse";
+      version = "1.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz";
+        sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==";
+      };
+    };
+    "array-filter-0.0.1" = {
+      name = "array-filter";
+      packageName = "array-filter";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz";
+        sha1 = "7da8cf2e26628ed732803581fd21f67cacd2eeec";
+      };
+    };
+    "array-from-2.1.1" = {
+      name = "array-from";
+      packageName = "array-from";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz";
+        sha1 = "cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195";
+      };
+    };
+    "array-map-0.0.0" = {
+      name = "array-map";
+      packageName = "array-map";
+      version = "0.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz";
+        sha1 = "88a2bab73d1cf7bcd5c1b118a003f66f665fa662";
+      };
+    };
+    "array-reduce-0.0.0" = {
+      name = "array-reduce";
+      packageName = "array-reduce";
+      version = "0.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz";
+        sha1 = "173899d3ffd1c7d9383e4479525dbe278cab5f2b";
+      };
+    };
+    "asap-2.0.6" = {
+      name = "asap";
+      packageName = "asap";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz";
+        sha1 = "e50347611d7e690943208bbdafebcbc2fb866d46";
+      };
+    };
+    "asn1-0.1.11" = {
+      name = "asn1";
+      packageName = "asn1";
+      version = "0.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz";
+        sha1 = "559be18376d08a4ec4dbe80877d27818639b2df7";
+      };
+    };
+    "asn1-0.2.4" = {
+      name = "asn1";
+      packageName = "asn1";
+      version = "0.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz";
+        sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==";
+      };
+    };
+    "asn1.js-4.10.1" = {
+      name = "asn1.js";
+      packageName = "asn1.js";
+      version = "4.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz";
+        sha512 = "p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==";
+      };
+    };
+    "assert-1.5.0" = {
+      name = "assert";
+      packageName = "assert";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz";
+        sha512 = "EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==";
+      };
+    };
+    "assert-plus-0.1.5" = {
+      name = "assert-plus";
+      packageName = "assert-plus";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz";
+        sha1 = "ee74009413002d84cec7219c6ac811812e723160";
+      };
+    };
+    "assert-plus-1.0.0" = {
+      name = "assert-plus";
+      packageName = "assert-plus";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
+        sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
+      };
+    };
+    "async-0.9.2" = {
+      name = "async";
+      packageName = "async";
+      version = "0.9.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async/-/async-0.9.2.tgz";
+        sha1 = "aea74d5e61c1f899613bf64bda66d4c78f2fd17d";
+      };
+    };
+    "asynckit-0.4.0" = {
+      name = "asynckit";
+      packageName = "asynckit";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
+        sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
+      };
+    };
+    "aws-sign2-0.5.0" = {
+      name = "aws-sign2";
+      packageName = "aws-sign2";
+      version = "0.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz";
+        sha1 = "c57103f7a17fc037f02d7c2e64b602ea223f7d63";
+      };
+    };
+    "aws-sign2-0.7.0" = {
+      name = "aws-sign2";
+      packageName = "aws-sign2";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
+        sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
+      };
+    };
+    "aws4-1.8.0" = {
+      name = "aws4";
+      packageName = "aws4";
+      version = "1.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz";
+        sha512 = "ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==";
+      };
+    };
+    "balanced-match-1.0.0" = {
+      name = "balanced-match";
+      packageName = "balanced-match";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";
+        sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
+      };
+    };
+    "base64-js-1.3.0" = {
+      name = "base64-js";
+      packageName = "base64-js";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz";
+        sha512 = "ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==";
+      };
+    };
+    "bcrypt-pbkdf-1.0.2" = {
+      name = "bcrypt-pbkdf";
+      packageName = "bcrypt-pbkdf";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
+        sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e";
+      };
+    };
+    "bn.js-4.11.8" = {
+      name = "bn.js";
+      packageName = "bn.js";
+      version = "4.11.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz";
+        sha512 = "ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==";
+      };
+    };
+    "boom-0.4.2" = {
+      name = "boom";
+      packageName = "boom";
+      version = "0.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz";
+        sha1 = "7a636e9ded4efcefb19cef4947a3c67dfaee911b";
+      };
+    };
+    "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==";
+      };
+    };
+    "brorand-1.1.0" = {
+      name = "brorand";
+      packageName = "brorand";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz";
+        sha1 = "12c25efe40a45e3c323eb8675a0a0ce57b22371f";
+      };
+    };
+    "browser-pack-6.1.0" = {
+      name = "browser-pack";
+      packageName = "browser-pack";
+      version = "6.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz";
+        sha512 = "erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==";
+      };
+    };
+    "browser-resolve-1.11.3" = {
+      name = "browser-resolve";
+      packageName = "browser-resolve";
+      version = "1.11.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz";
+        sha512 = "exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==";
+      };
+    };
+    "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==";
+      };
+    };
+    "browserify-aes-1.2.0" = {
+      name = "browserify-aes";
+      packageName = "browserify-aes";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz";
+        sha512 = "+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==";
+      };
+    };
+    "browserify-cipher-1.0.1" = {
+      name = "browserify-cipher";
+      packageName = "browserify-cipher";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz";
+        sha512 = "sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==";
+      };
+    };
+    "browserify-des-1.0.2" = {
+      name = "browserify-des";
+      packageName = "browserify-des";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz";
+        sha512 = "BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==";
+      };
+    };
+    "browserify-rsa-4.0.1" = {
+      name = "browserify-rsa";
+      packageName = "browserify-rsa";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz";
+        sha1 = "21e0abfaf6f2029cf2fafb133567a701d4135524";
+      };
+    };
+    "browserify-sign-4.0.4" = {
+      name = "browserify-sign";
+      packageName = "browserify-sign";
+      version = "4.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz";
+        sha1 = "aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298";
+      };
+    };
+    "browserify-zlib-0.2.0" = {
+      name = "browserify-zlib";
+      packageName = "browserify-zlib";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz";
+        sha512 = "Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==";
+      };
+    };
+    "buffer-5.2.1" = {
+      name = "buffer";
+      packageName = "buffer";
+      version = "5.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz";
+        sha512 = "c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==";
+      };
+    };
+    "buffer-from-1.1.1" = {
+      name = "buffer-from";
+      packageName = "buffer-from";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz";
+        sha512 = "MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==";
+      };
+    };
+    "buffer-xor-1.0.3" = {
+      name = "buffer-xor";
+      packageName = "buffer-xor";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz";
+        sha1 = "26e61ed1422fb70dd42e6e36729ed51d855fe8d9";
+      };
+    };
+    "builtin-status-codes-3.0.0" = {
+      name = "builtin-status-codes";
+      packageName = "builtin-status-codes";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz";
+        sha1 = "85982878e21b98e1c66425e03d0174788f569ee8";
+      };
+    };
+    "cached-path-relative-1.0.2" = {
+      name = "cached-path-relative";
+      packageName = "cached-path-relative";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz";
+        sha512 = "5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==";
+      };
+    };
+    "camelcase-5.3.1" = {
+      name = "camelcase";
+      packageName = "camelcase";
+      version = "5.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz";
+        sha512 = "L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==";
+      };
+    };
+    "caseless-0.12.0" = {
+      name = "caseless";
+      packageName = "caseless";
+      version = "0.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
+        sha1 = "1b681c21ff84033c826543090689420d187151dc";
+      };
+    };
+    "chalk-2.4.2" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "2.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz";
+        sha512 = "Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==";
+      };
+    };
+    "cipher-base-1.0.4" = {
+      name = "cipher-base";
+      packageName = "cipher-base";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz";
+        sha512 = "Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==";
+      };
+    };
+    "cli-1.0.1" = {
+      name = "cli";
+      packageName = "cli";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz";
+        sha1 = "22817534f24bfa4950c34d532d48ecbc621b8c14";
+      };
+    };
+    "cliui-4.1.0" = {
+      name = "cliui";
+      packageName = "cliui";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz";
+        sha512 = "4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==";
+      };
+    };
+    "clone-2.1.2" = {
+      name = "clone";
+      packageName = "clone";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz";
+        sha1 = "1b7f4b9f591f1e8f83670401600345a02887435f";
+      };
+    };
+    "code-point-at-1.1.0" = {
+      name = "code-point-at";
+      packageName = "code-point-at";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz";
+        sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77";
+      };
+    };
+    "color-convert-1.9.3" = {
+      name = "color-convert";
+      packageName = "color-convert";
+      version = "1.9.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz";
+        sha512 = "QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==";
+      };
+    };
+    "color-name-1.1.3" = {
+      name = "color-name";
+      packageName = "color-name";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz";
+        sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
+      };
+    };
+    "combine-source-map-0.8.0" = {
+      name = "combine-source-map";
+      packageName = "combine-source-map";
+      version = "0.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz";
+        sha1 = "a58d0df042c186fcf822a8e8015f5450d2d79a8b";
+      };
+    };
+    "combined-stream-0.0.7" = {
+      name = "combined-stream";
+      packageName = "combined-stream";
+      version = "0.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz";
+        sha1 = "0137e657baa5a7541c57ac37ac5fc07d73b4dc1f";
+      };
+    };
+    "combined-stream-1.0.8" = {
+      name = "combined-stream";
+      packageName = "combined-stream";
+      version = "1.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz";
+        sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==";
+      };
+    };
+    "commander-2.20.0" = {
+      name = "commander";
+      packageName = "commander";
+      version = "2.20.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz";
+        sha512 = "7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==";
+      };
+    };
+    "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";
+      };
+    };
+    "concat-stream-1.6.2" = {
+      name = "concat-stream";
+      packageName = "concat-stream";
+      version = "1.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz";
+        sha512 = "27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==";
+      };
+    };
+    "config-chain-1.1.12" = {
+      name = "config-chain";
+      packageName = "config-chain";
+      version = "1.1.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz";
+        sha512 = "a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==";
+      };
+    };
+    "console-browserify-1.1.0" = {
+      name = "console-browserify";
+      packageName = "console-browserify";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz";
+        sha1 = "f0241c45730a9fc6323b206dbf38edc741d0bb10";
+      };
+    };
+    "constants-browserify-1.0.0" = {
+      name = "constants-browserify";
+      packageName = "constants-browserify";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz";
+        sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75";
+      };
+    };
+    "convert-source-map-1.1.3" = {
+      name = "convert-source-map";
+      packageName = "convert-source-map";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz";
+        sha1 = "4829c877e9fe49b3161f3bf3673888e204699860";
+      };
+    };
+    "core-util-is-1.0.2" = {
+      name = "core-util-is";
+      packageName = "core-util-is";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
+        sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
+      };
+    };
+    "create-ecdh-4.0.3" = {
+      name = "create-ecdh";
+      packageName = "create-ecdh";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz";
+        sha512 = "GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==";
+      };
+    };
+    "create-hash-1.2.0" = {
+      name = "create-hash";
+      packageName = "create-hash";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz";
+        sha512 = "z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==";
+      };
+    };
+    "create-hmac-1.1.7" = {
+      name = "create-hmac";
+      packageName = "create-hmac";
+      version = "1.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz";
+        sha512 = "MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==";
+      };
+    };
+    "cross-spawn-6.0.5" = {
+      name = "cross-spawn";
+      packageName = "cross-spawn";
+      version = "6.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz";
+        sha512 = "eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==";
+      };
+    };
+    "cryptiles-0.2.2" = {
+      name = "cryptiles";
+      packageName = "cryptiles";
+      version = "0.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz";
+        sha1 = "ed91ff1f17ad13d3748288594f8a48a0d26f325c";
+      };
+    };
+    "crypto-browserify-3.12.0" = {
+      name = "crypto-browserify";
+      packageName = "crypto-browserify";
+      version = "3.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz";
+        sha512 = "fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==";
+      };
+    };
+    "ctype-0.5.3" = {
+      name = "ctype";
+      packageName = "ctype";
+      version = "0.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz";
+        sha1 = "82c18c2461f74114ef16c135224ad0b9144ca12f";
+      };
+    };
+    "dash-ast-1.0.0" = {
+      name = "dash-ast";
+      packageName = "dash-ast";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz";
+        sha512 = "Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==";
+      };
+    };
+    "dashdash-1.14.1" = {
+      name = "dashdash";
+      packageName = "dashdash";
+      version = "1.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
+        sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
+      };
+    };
+    "date-now-0.1.4" = {
+      name = "date-now";
+      packageName = "date-now";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz";
+        sha1 = "eaf439fd4d4848ad74e5cc7dbef200672b9e345b";
+      };
+    };
+    "debug-3.2.6" = {
+      name = "debug";
+      packageName = "debug";
+      version = "3.2.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz";
+        sha512 = "mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==";
+      };
+    };
+    "decamelize-1.2.0" = {
+      name = "decamelize";
+      packageName = "decamelize";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz";
+        sha1 = "f6534d15148269b20352e7bee26f501f9a191290";
+      };
+    };
+    "define-properties-1.1.3" = {
+      name = "define-properties";
+      packageName = "define-properties";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz";
+        sha512 = "3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==";
+      };
+    };
+    "defined-1.0.0" = {
+      name = "defined";
+      packageName = "defined";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz";
+        sha1 = "c98d9bcef75674188e110969151199e39b1fa693";
+      };
+    };
+    "delayed-stream-0.0.5" = {
+      name = "delayed-stream";
+      packageName = "delayed-stream";
+      version = "0.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz";
+        sha1 = "d4b1f43a93e8296dfe02694f4680bc37a313c73f";
+      };
+    };
+    "delayed-stream-1.0.0" = {
+      name = "delayed-stream";
+      packageName = "delayed-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
+        sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
+      };
+    };
+    "deps-sort-2.0.0" = {
+      name = "deps-sort";
+      packageName = "deps-sort";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz";
+        sha1 = "091724902e84658260eb910748cccd1af6e21fb5";
+      };
+    };
+    "des.js-1.0.0" = {
+      name = "des.js";
+      packageName = "des.js";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz";
+        sha1 = "c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc";
+      };
+    };
+    "detective-5.2.0" = {
+      name = "detective";
+      packageName = "detective";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz";
+        sha512 = "6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==";
+      };
+    };
+    "diff-3.5.0" = {
+      name = "diff";
+      packageName = "diff";
+      version = "3.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz";
+        sha512 = "A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==";
+      };
+    };
+    "diffie-hellman-5.0.3" = {
+      name = "diffie-hellman";
+      packageName = "diffie-hellman";
+      version = "5.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz";
+        sha512 = "kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==";
+      };
+    };
+    "dom-serializer-0.1.1" = {
+      name = "dom-serializer";
+      packageName = "dom-serializer";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz";
+        sha512 = "l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==";
+      };
+    };
+    "domain-browser-1.2.0" = {
+      name = "domain-browser";
+      packageName = "domain-browser";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz";
+        sha512 = "jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==";
+      };
+    };
+    "domelementtype-1.3.1" = {
+      name = "domelementtype";
+      packageName = "domelementtype";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz";
+        sha512 = "BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==";
+      };
+    };
+    "domhandler-2.3.0" = {
+      name = "domhandler";
+      packageName = "domhandler";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz";
+        sha1 = "2de59a0822d5027fabff6f032c2b25a2a8abe738";
+      };
+    };
+    "domutils-1.5.1" = {
+      name = "domutils";
+      packageName = "domutils";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz";
+        sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf";
+      };
+    };
+    "duplexer2-0.1.4" = {
+      name = "duplexer2";
+      packageName = "duplexer2";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz";
+        sha1 = "8b12dab878c0d69e3e7891051662a32fc6bddcc1";
+      };
+    };
+    "ecc-jsbn-0.1.2" = {
+      name = "ecc-jsbn";
+      packageName = "ecc-jsbn";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
+        sha1 = "3a83a904e54353287874c564b7549386849a98c9";
+      };
+    };
+    "elliptic-6.4.1" = {
+      name = "elliptic";
+      packageName = "elliptic";
+      version = "6.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz";
+        sha512 = "BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==";
+      };
+    };
+    "emoji-regex-7.0.3" = {
+      name = "emoji-regex";
+      packageName = "emoji-regex";
+      version = "7.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz";
+        sha512 = "CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==";
+      };
+    };
+    "end-of-stream-1.4.1" = {
+      name = "end-of-stream";
+      packageName = "end-of-stream";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz";
+        sha512 = "1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==";
+      };
+    };
+    "entities-1.0.0" = {
+      name = "entities";
+      packageName = "entities";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz";
+        sha1 = "b2987aa3821347fcde642b24fdfc9e4fb712bf26";
+      };
+    };
+    "entities-1.1.2" = {
+      name = "entities";
+      packageName = "entities";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz";
+        sha512 = "f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==";
+      };
+    };
+    "errno-0.1.7" = {
+      name = "errno";
+      packageName = "errno";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz";
+        sha512 = "MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==";
+      };
+    };
+    "es-abstract-1.13.0" = {
+      name = "es-abstract";
+      packageName = "es-abstract";
+      version = "1.13.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz";
+        sha512 = "vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==";
+      };
+    };
+    "es-to-primitive-1.2.0" = {
+      name = "es-to-primitive";
+      packageName = "es-to-primitive";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz";
+        sha512 = "qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==";
+      };
+    };
+    "escape-string-regexp-1.0.5" = {
+      name = "escape-string-regexp";
+      packageName = "escape-string-regexp";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
+        sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
+      };
+    };
+    "esprima-4.0.1" = {
+      name = "esprima";
+      packageName = "esprima";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz";
+        sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==";
+      };
+    };
+    "events-2.1.0" = {
+      name = "events";
+      packageName = "events";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/events/-/events-2.1.0.tgz";
+        sha512 = "3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==";
+      };
+    };
+    "evp_bytestokey-1.0.3" = {
+      name = "evp_bytestokey";
+      packageName = "evp_bytestokey";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz";
+        sha512 = "/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==";
+      };
+    };
+    "execa-1.0.0" = {
+      name = "execa";
+      packageName = "execa";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz";
+        sha512 = "adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==";
+      };
+    };
+    "exit-0.1.2" = {
+      name = "exit";
+      packageName = "exit";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz";
+        sha1 = "0632638f8d877cc82107d30a0fff1a17cba1cd0c";
+      };
+    };
+    "extend-3.0.2" = {
+      name = "extend";
+      packageName = "extend";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
+        sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==";
+      };
+    };
+    "extsprintf-1.3.0" = {
+      name = "extsprintf";
+      packageName = "extsprintf";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
+        sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
+      };
+    };
+    "fast-deep-equal-2.0.1" = {
+      name = "fast-deep-equal";
+      packageName = "fast-deep-equal";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz";
+        sha1 = "7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49";
+      };
+    };
+    "fast-json-stable-stringify-2.0.0" = {
+      name = "fast-json-stable-stringify";
+      packageName = "fast-json-stable-stringify";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz";
+        sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2";
+      };
+    };
+    "find-up-3.0.0" = {
+      name = "find-up";
+      packageName = "find-up";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz";
+        sha512 = "1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==";
+      };
+    };
+    "flat-4.1.0" = {
+      name = "flat";
+      packageName = "flat";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz";
+        sha512 = "Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==";
+      };
+    };
+    "forever-agent-0.5.2" = {
+      name = "forever-agent";
+      packageName = "forever-agent";
+      version = "0.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz";
+        sha1 = "6d0e09c4921f94a27f63d3b49c5feff1ea4c5130";
+      };
+    };
+    "forever-agent-0.6.1" = {
+      name = "forever-agent";
+      packageName = "forever-agent";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
+        sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
+      };
+    };
+    "form-data-0.1.4" = {
+      name = "form-data";
+      packageName = "form-data";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz";
+        sha1 = "91abd788aba9702b1aabfa8bc01031a2ac9e3b12";
+      };
+    };
+    "form-data-2.3.3" = {
+      name = "form-data";
+      packageName = "form-data";
+      version = "2.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz";
+        sha512 = "1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==";
+      };
+    };
+    "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";
+      };
+    };
+    "function-bind-1.1.1" = {
+      name = "function-bind";
+      packageName = "function-bind";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz";
+        sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==";
+      };
+    };
+    "get-assigned-identifiers-1.2.0" = {
+      name = "get-assigned-identifiers";
+      packageName = "get-assigned-identifiers";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz";
+        sha512 = "mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==";
+      };
+    };
+    "get-caller-file-1.0.3" = {
+      name = "get-caller-file";
+      packageName = "get-caller-file";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz";
+        sha512 = "3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==";
+      };
+    };
+    "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==";
+      };
+    };
+    "get-stream-4.1.0" = {
+      name = "get-stream";
+      packageName = "get-stream";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz";
+        sha512 = "GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==";
+      };
+    };
+    "getpass-0.1.7" = {
+      name = "getpass";
+      packageName = "getpass";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
+        sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
+      };
+    };
+    "glob-7.1.3" = {
+      name = "glob";
+      packageName = "glob";
+      version = "7.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz";
+        sha512 = "vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==";
+      };
+    };
+    "glob-7.1.4" = {
+      name = "glob";
+      packageName = "glob";
+      version = "7.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz";
+        sha512 = "hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==";
+      };
+    };
+    "graceful-fs-4.1.15" = {
+      name = "graceful-fs";
+      packageName = "graceful-fs";
+      version = "4.1.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz";
+        sha512 = "6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==";
+      };
+    };
+    "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==";
+      };
+    };
+    "har-schema-2.0.0" = {
+      name = "har-schema";
+      packageName = "har-schema";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
+        sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
+      };
+    };
+    "har-validator-5.1.3" = {
+      name = "har-validator";
+      packageName = "har-validator";
+      version = "5.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz";
+        sha512 = "sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==";
+      };
+    };
+    "has-1.0.3" = {
+      name = "has";
+      packageName = "has";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz";
+        sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==";
+      };
+    };
+    "has-flag-3.0.0" = {
+      name = "has-flag";
+      packageName = "has-flag";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz";
+        sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd";
+      };
+    };
+    "has-symbols-1.0.0" = {
+      name = "has-symbols";
+      packageName = "has-symbols";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz";
+        sha1 = "ba1a8f1af2a0fc39650f5c850367704122063b44";
+      };
+    };
+    "hash-base-3.0.4" = {
+      name = "hash-base";
+      packageName = "hash-base";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz";
+        sha1 = "5fc8686847ecd73499403319a6b0a3f3f6ae4918";
+      };
+    };
+    "hash.js-1.1.7" = {
+      name = "hash.js";
+      packageName = "hash.js";
+      version = "1.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz";
+        sha512 = "taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==";
+      };
+    };
+    "hawk-1.0.0" = {
+      name = "hawk";
+      packageName = "hawk";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz";
+        sha1 = "b90bb169807285411da7ffcb8dd2598502d3b52d";
+      };
+    };
+    "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==";
+      };
+    };
+    "hmac-drbg-1.0.1" = {
+      name = "hmac-drbg";
+      packageName = "hmac-drbg";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz";
+        sha1 = "d2745701025a6c775a6c545793ed502fc0c649a1";
+      };
+    };
+    "hoek-0.9.1" = {
+      name = "hoek";
+      packageName = "hoek";
+      version = "0.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz";
+        sha1 = "3d322462badf07716ea7eb85baf88079cddce505";
+      };
+    };
+    "htmlescape-1.1.1" = {
+      name = "htmlescape";
+      packageName = "htmlescape";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz";
+        sha1 = "3a03edc2214bca3b66424a3e7959349509cb0351";
+      };
+    };
+    "htmlparser2-3.8.3" = {
+      name = "htmlparser2";
+      packageName = "htmlparser2";
+      version = "3.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz";
+        sha1 = "996c28b191516a8be86501a7d79757e5c70c1068";
+      };
+    };
+    "http-signature-0.10.1" = {
+      name = "http-signature";
+      packageName = "http-signature";
+      version = "0.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz";
+        sha1 = "4fbdac132559aa8323121e540779c0a012b27e66";
+      };
+    };
+    "http-signature-1.2.0" = {
+      name = "http-signature";
+      packageName = "http-signature";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
+        sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
+      };
+    };
+    "https-browserify-1.0.0" = {
+      name = "https-browserify";
+      packageName = "https-browserify";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz";
+        sha1 = "ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73";
+      };
+    };
+    "ieee754-1.1.13" = {
+      name = "ieee754";
+      packageName = "ieee754";
+      version = "1.1.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz";
+        sha512 = "4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==";
+      };
+    };
+    "image-size-0.5.5" = {
+      name = "image-size";
+      packageName = "image-size";
+      version = "0.5.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz";
+        sha1 = "09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c";
+      };
+    };
+    "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-1.0.2" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz";
+        sha1 = "ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b";
+      };
+    };
+    "inherits-2.0.1" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz";
+        sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1";
+      };
+    };
+    "inherits-2.0.3" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
+        sha1 = "633c2c83e3da42a502f52466022480f4208261de";
+      };
+    };
+    "ini-1.1.0" = {
+      name = "ini";
+      packageName = "ini";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz";
+        sha1 = "4e808c2ce144c6c1788918e034d6797bc6cf6281";
+      };
+    };
+    "ini-1.3.5" = {
+      name = "ini";
+      packageName = "ini";
+      version = "1.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz";
+        sha512 = "RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==";
+      };
+    };
+    "inline-source-map-0.6.2" = {
+      name = "inline-source-map";
+      packageName = "inline-source-map";
+      version = "0.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz";
+        sha1 = "f9393471c18a79d1724f863fa38b586370ade2a5";
+      };
+    };
+    "insert-module-globals-7.2.0" = {
+      name = "insert-module-globals";
+      packageName = "insert-module-globals";
+      version = "7.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz";
+        sha512 = "VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==";
+      };
+    };
+    "interpret-1.2.0" = {
+      name = "interpret";
+      packageName = "interpret";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz";
+        sha512 = "mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==";
+      };
+    };
+    "invert-kv-2.0.0" = {
+      name = "invert-kv";
+      packageName = "invert-kv";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz";
+        sha512 = "wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==";
+      };
+    };
+    "ip-regex-2.1.0" = {
+      name = "ip-regex";
+      packageName = "ip-regex";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz";
+        sha1 = "fa78bf5d2e6913c911ce9f819ee5146bb6d844e9";
+      };
+    };
+    "is-buffer-1.1.6" = {
+      name = "is-buffer";
+      packageName = "is-buffer";
+      version = "1.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz";
+        sha512 = "NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==";
+      };
+    };
+    "is-buffer-2.0.3" = {
+      name = "is-buffer";
+      packageName = "is-buffer";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz";
+        sha512 = "U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==";
+      };
+    };
+    "is-callable-1.1.4" = {
+      name = "is-callable";
+      packageName = "is-callable";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz";
+        sha512 = "r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==";
+      };
+    };
+    "is-date-object-1.0.1" = {
+      name = "is-date-object";
+      packageName = "is-date-object";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz";
+        sha1 = "9aa20eb6aeebbff77fbd33e74ca01b33581d3a16";
+      };
+    };
+    "is-fullwidth-code-point-1.0.0" = {
+      name = "is-fullwidth-code-point";
+      packageName = "is-fullwidth-code-point";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
+        sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
+      };
+    };
+    "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-regex-1.0.4" = {
+      name = "is-regex";
+      packageName = "is-regex";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz";
+        sha1 = "5517489b547091b0930e095654ced25ee97e9491";
+      };
+    };
+    "is-stream-1.1.0" = {
+      name = "is-stream";
+      packageName = "is-stream";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz";
+        sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
+      };
+    };
+    "is-symbol-1.0.2" = {
+      name = "is-symbol";
+      packageName = "is-symbol";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz";
+        sha512 = "HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==";
+      };
+    };
+    "is-typedarray-1.0.0" = {
+      name = "is-typedarray";
+      packageName = "is-typedarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
+        sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
+      };
+    };
+    "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";
+      };
+    };
+    "isarray-1.0.0" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
+        sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+      };
+    };
+    "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-3.13.1" = {
+      name = "js-yaml";
+      packageName = "js-yaml";
+      version = "3.13.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz";
+        sha512 = "YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==";
+      };
+    };
+    "jsbn-0.1.1" = {
+      name = "jsbn";
+      packageName = "jsbn";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
+        sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
+      };
+    };
+    "json-schema-0.2.3" = {
+      name = "json-schema";
+      packageName = "json-schema";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
+        sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
+      };
+    };
+    "json-schema-traverse-0.4.1" = {
+      name = "json-schema-traverse";
+      packageName = "json-schema-traverse";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+        sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
+      };
+    };
+    "json-stable-stringify-0.0.1" = {
+      name = "json-stable-stringify";
+      packageName = "json-stable-stringify";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz";
+        sha1 = "611c23e814db375527df851193db59dd2af27f45";
+      };
+    };
+    "json-stringify-safe-5.0.1" = {
+      name = "json-stringify-safe";
+      packageName = "json-stringify-safe";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
+        sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
+      };
+    };
+    "jsonify-0.0.0" = {
+      name = "jsonify";
+      packageName = "jsonify";
+      version = "0.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz";
+        sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73";
+      };
+    };
+    "jsonparse-1.3.1" = {
+      name = "jsonparse";
+      packageName = "jsonparse";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz";
+        sha1 = "3f4dae4a91fac315f71062f8521cc239f1366280";
+      };
+    };
+    "jsprim-1.4.1" = {
+      name = "jsprim";
+      packageName = "jsprim";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz";
+        sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
+      };
+    };
+    "just-extend-4.0.2" = {
+      name = "just-extend";
+      packageName = "just-extend";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz";
+        sha512 = "FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==";
+      };
+    };
+    "kew-0.1.7" = {
+      name = "kew";
+      packageName = "kew";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kew/-/kew-0.1.7.tgz";
+        sha1 = "0a32a817ff1a9b3b12b8c9bacf4bc4d679af8e72";
+      };
+    };
+    "labeled-stream-splicer-2.0.2" = {
+      name = "labeled-stream-splicer";
+      packageName = "labeled-stream-splicer";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz";
+        sha512 = "Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==";
+      };
+    };
+    "lcid-2.0.0" = {
+      name = "lcid";
+      packageName = "lcid";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz";
+        sha512 = "avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==";
+      };
+    };
+    "locate-path-3.0.0" = {
+      name = "locate-path";
+      packageName = "locate-path";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz";
+        sha512 = "7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==";
+      };
+    };
+    "lodash-4.17.11" = {
+      name = "lodash";
+      packageName = "lodash";
+      version = "4.17.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz";
+        sha512 = "cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==";
+      };
+    };
+    "lodash.memoize-3.0.4" = {
+      name = "lodash.memoize";
+      packageName = "lodash.memoize";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz";
+        sha1 = "2dcbd2c287cbc0a55cc42328bd0c736150d53e3f";
+      };
+    };
+    "log-symbols-2.2.0" = {
+      name = "log-symbols";
+      packageName = "log-symbols";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz";
+        sha512 = "VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==";
+      };
+    };
+    "lolex-4.1.0" = {
+      name = "lolex";
+      packageName = "lolex";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lolex/-/lolex-4.1.0.tgz";
+        sha512 = "BYxIEXiVq5lGIXeVHnsFzqa1TxN5acnKnPCdlZSpzm8viNEOhiigupA4vTQ9HEFQ6nLTQ9wQOgBknJgzUYQ9Aw==";
+      };
+    };
+    "map-age-cleaner-0.1.3" = {
+      name = "map-age-cleaner";
+      packageName = "map-age-cleaner";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz";
+        sha512 = "bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==";
+      };
+    };
+    "md5.js-1.3.5" = {
+      name = "md5.js";
+      packageName = "md5.js";
+      version = "1.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz";
+        sha512 = "xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==";
+      };
+    };
+    "mem-4.3.0" = {
+      name = "mem";
+      packageName = "mem";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz";
+        sha512 = "qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==";
+      };
+    };
+    "miller-rabin-4.0.1" = {
+      name = "miller-rabin";
+      packageName = "miller-rabin";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz";
+        sha512 = "115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==";
+      };
+    };
+    "mime-1.2.11" = {
+      name = "mime";
+      packageName = "mime";
+      version = "1.2.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz";
+        sha1 = "58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10";
+      };
+    };
+    "mime-1.6.0" = {
+      name = "mime";
+      packageName = "mime";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz";
+        sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==";
+      };
+    };
+    "mime-db-1.40.0" = {
+      name = "mime-db";
+      packageName = "mime-db";
+      version = "1.40.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz";
+        sha512 = "jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==";
+      };
+    };
+    "mime-types-2.1.24" = {
+      name = "mime-types";
+      packageName = "mime-types";
+      version = "2.1.24";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz";
+        sha512 = "WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==";
+      };
+    };
+    "mimic-fn-2.1.0" = {
+      name = "mimic-fn";
+      packageName = "mimic-fn";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz";
+        sha512 = "OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==";
+      };
+    };
+    "minimalistic-assert-1.0.1" = {
+      name = "minimalistic-assert";
+      packageName = "minimalistic-assert";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz";
+        sha512 = "UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==";
+      };
+    };
+    "minimalistic-crypto-utils-1.0.1" = {
+      name = "minimalistic-crypto-utils";
+      packageName = "minimalistic-crypto-utils";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz";
+        sha1 = "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a";
+      };
+    };
+    "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==";
+      };
+    };
+    "minimist-0.0.8" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "0.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
+        sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
+      };
+    };
+    "minimist-1.2.0" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
+        sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284";
+      };
+    };
+    "mkdirp-0.3.5" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz";
+        sha1 = "de3e5f8961c88c787ee1368df849ac4413eca8d7";
+      };
+    };
+    "mkdirp-0.5.1" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
+        sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
+      };
+    };
+    "mocha-phantomjs-core-1.3.1" = {
+      name = "mocha-phantomjs-core";
+      packageName = "mocha-phantomjs-core";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mocha-phantomjs-core/-/mocha-phantomjs-core-1.3.1.tgz";
+        sha1 = "586538c8d71fa8de90c41a46acc0481c1fb83e18";
+      };
+    };
+    "module-deps-6.2.1" = {
+      name = "module-deps";
+      packageName = "module-deps";
+      version = "6.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/module-deps/-/module-deps-6.2.1.tgz";
+        sha512 = "UnEn6Ah36Tu4jFiBbJVUtt0h+iXqxpLqDvPS8nllbw5RZFmNJ1+Mz5BjYnM9ieH80zyxHkARGLnMIHlPK5bu6A==";
+      };
+    };
+    "ms-2.1.1" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz";
+        sha512 = "tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==";
+      };
+    };
+    "ncp-0.4.2" = {
+      name = "ncp";
+      packageName = "ncp";
+      version = "0.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz";
+        sha1 = "abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574";
+      };
+    };
+    "nice-try-1.0.5" = {
+      name = "nice-try";
+      packageName = "nice-try";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz";
+        sha512 = "1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==";
+      };
+    };
+    "nise-1.5.0" = {
+      name = "nise";
+      packageName = "nise";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nise/-/nise-1.5.0.tgz";
+        sha512 = "Z3sfYEkLFzFmL8KY6xnSJLRxwQwYBjOXi/24lb62ZnZiGA0JUzGGTI6TBIgfCSMIDl9Jlu8SRmHNACLTemDHww==";
+      };
+    };
+    "node-environment-flags-1.0.5" = {
+      name = "node-environment-flags";
+      packageName = "node-environment-flags";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz";
+        sha512 = "VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==";
+      };
+    };
+    "node-uuid-1.4.8" = {
+      name = "node-uuid";
+      packageName = "node-uuid";
+      version = "1.4.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz";
+        sha1 = "b040eb0923968afabf8d32fb1f17f1167fdab907";
+      };
+    };
+    "nopt-2.2.1" = {
+      name = "nopt";
+      packageName = "nopt";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz";
+        sha1 = "2aa09b7d1768487b3b89a9c5aa52335bff0baea7";
+      };
+    };
+    "npm-run-path-2.0.2" = {
+      name = "npm-run-path";
+      packageName = "npm-run-path";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz";
+        sha1 = "35a9232dfa35d7067b4cb2ddf2357b1871536c5f";
+      };
+    };
+    "npmconf-0.0.24" = {
+      name = "npmconf";
+      packageName = "npmconf";
+      version = "0.0.24";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npmconf/-/npmconf-0.0.24.tgz";
+        sha1 = "b78875b088ccc3c0afa3eceb3ce3244b1b52390c";
+      };
+    };
+    "number-is-nan-1.0.1" = {
+      name = "number-is-nan";
+      packageName = "number-is-nan";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz";
+        sha1 = "097b602b53422a522c1afb8790318336941a011d";
+      };
+    };
+    "oauth-sign-0.3.0" = {
+      name = "oauth-sign";
+      packageName = "oauth-sign";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz";
+        sha1 = "cb540f93bb2b22a7d5941691a288d60e8ea9386e";
+      };
+    };
+    "oauth-sign-0.9.0" = {
+      name = "oauth-sign";
+      packageName = "oauth-sign";
+      version = "0.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz";
+        sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==";
+      };
+    };
+    "object-assign-4.1.1" = {
+      name = "object-assign";
+      packageName = "object-assign";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
+        sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
+      };
+    };
+    "object-keys-1.1.1" = {
+      name = "object-keys";
+      packageName = "object-keys";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz";
+        sha512 = "NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==";
+      };
+    };
+    "object.assign-4.1.0" = {
+      name = "object.assign";
+      packageName = "object.assign";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz";
+        sha512 = "exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==";
+      };
+    };
+    "object.getownpropertydescriptors-2.0.3" = {
+      name = "object.getownpropertydescriptors";
+      packageName = "object.getownpropertydescriptors";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz";
+        sha1 = "8758c846f5b407adab0f236e0986f14b051caa16";
+      };
+    };
+    "once-1.1.1" = {
+      name = "once";
+      packageName = "once";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/once/-/once-1.1.1.tgz";
+        sha1 = "9db574933ccb08c3a7614d154032c09ea6f339e7";
+      };
+    };
+    "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";
+      };
+    };
+    "os-browserify-0.3.0" = {
+      name = "os-browserify";
+      packageName = "os-browserify";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz";
+        sha1 = "854373c7f5c2315914fc9bfc6bd8238fdda1ec27";
+      };
+    };
+    "os-locale-3.1.0" = {
+      name = "os-locale";
+      packageName = "os-locale";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz";
+        sha512 = "Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==";
+      };
+    };
+    "osenv-0.0.3" = {
+      name = "osenv";
+      packageName = "osenv";
+      version = "0.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz";
+        sha1 = "cd6ad8ddb290915ad9e22765576025d411f29cb6";
+      };
+    };
+    "p-defer-1.0.0" = {
+      name = "p-defer";
+      packageName = "p-defer";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz";
+        sha1 = "9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c";
+      };
+    };
+    "p-finally-1.0.0" = {
+      name = "p-finally";
+      packageName = "p-finally";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz";
+        sha1 = "3fbcfb15b899a44123b34b6dcc18b724336a2cae";
+      };
+    };
+    "p-is-promise-2.1.0" = {
+      name = "p-is-promise";
+      packageName = "p-is-promise";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz";
+        sha512 = "Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==";
+      };
+    };
+    "p-limit-2.2.0" = {
+      name = "p-limit";
+      packageName = "p-limit";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz";
+        sha512 = "pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==";
+      };
+    };
+    "p-locate-3.0.0" = {
+      name = "p-locate";
+      packageName = "p-locate";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz";
+        sha512 = "x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==";
+      };
+    };
+    "p-try-2.2.0" = {
+      name = "p-try";
+      packageName = "p-try";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz";
+        sha512 = "R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==";
+      };
+    };
+    "pako-1.0.10" = {
+      name = "pako";
+      packageName = "pako";
+      version = "1.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz";
+        sha512 = "0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==";
+      };
+    };
+    "parents-1.0.1" = {
+      name = "parents";
+      packageName = "parents";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz";
+        sha1 = "fedd4d2bf193a77745fe71e371d73c3307d9c751";
+      };
+    };
+    "parse-asn1-5.1.4" = {
+      name = "parse-asn1";
+      packageName = "parse-asn1";
+      version = "5.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz";
+        sha512 = "Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==";
+      };
+    };
+    "path-browserify-0.0.1" = {
+      name = "path-browserify";
+      packageName = "path-browserify";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz";
+        sha512 = "BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==";
+      };
+    };
+    "path-exists-3.0.0" = {
+      name = "path-exists";
+      packageName = "path-exists";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz";
+        sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515";
+      };
+    };
+    "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";
+      };
+    };
+    "path-key-2.0.1" = {
+      name = "path-key";
+      packageName = "path-key";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz";
+        sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40";
+      };
+    };
+    "path-parse-1.0.6" = {
+      name = "path-parse";
+      packageName = "path-parse";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz";
+        sha512 = "GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==";
+      };
+    };
+    "path-platform-0.11.15" = {
+      name = "path-platform";
+      packageName = "path-platform";
+      version = "0.11.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz";
+        sha1 = "e864217f74c36850f0852b78dc7bf7d4a5721bf2";
+      };
+    };
+    "path-to-regexp-1.7.0" = {
+      name = "path-to-regexp";
+      packageName = "path-to-regexp";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz";
+        sha1 = "59fde0f435badacba103a84e9d3bc64e96b9937d";
+      };
+    };
+    "pbkdf2-3.0.17" = {
+      name = "pbkdf2";
+      packageName = "pbkdf2";
+      version = "3.0.17";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz";
+        sha512 = "U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==";
+      };
+    };
+    "performance-now-2.1.0" = {
+      name = "performance-now";
+      packageName = "performance-now";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
+        sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
+      };
+    };
+    "phantomjs-1.9.7-15" = {
+      name = "phantomjs";
+      packageName = "phantomjs";
+      version = "1.9.7-15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.7-15.tgz";
+        sha1 = "0b3a7ce630486a83be91ff4e832eee20e971115b";
+      };
+    };
+    "process-0.11.10" = {
+      name = "process";
+      packageName = "process";
+      version = "0.11.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process/-/process-0.11.10.tgz";
+        sha1 = "7332300e840161bda3e69a1d1d91a7d4bc16f182";
+      };
+    };
+    "process-nextick-args-2.0.0" = {
+      name = "process-nextick-args";
+      packageName = "process-nextick-args";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz";
+        sha512 = "MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==";
+      };
+    };
+    "progress-1.1.8" = {
+      name = "progress";
+      packageName = "progress";
+      version = "1.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz";
+        sha1 = "e260c78f6161cdd9b0e56cc3e0a85de17c7a57be";
+      };
+    };
+    "promise-7.3.1" = {
+      name = "promise";
+      packageName = "promise";
+      version = "7.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz";
+        sha512 = "nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==";
+      };
+    };
+    "proto-list-1.2.4" = {
+      name = "proto-list";
+      packageName = "proto-list";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz";
+        sha1 = "212d5bfe1318306a420f6402b8e26ff39647a849";
+      };
+    };
+    "prr-1.0.1" = {
+      name = "prr";
+      packageName = "prr";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz";
+        sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476";
+      };
+    };
+    "psl-1.1.32" = {
+      name = "psl";
+      packageName = "psl";
+      version = "1.1.32";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz";
+        sha512 = "MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==";
+      };
+    };
+    "public-encrypt-4.0.3" = {
+      name = "public-encrypt";
+      packageName = "public-encrypt";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz";
+        sha512 = "zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==";
+      };
+    };
+    "pump-3.0.0" = {
+      name = "pump";
+      packageName = "pump";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz";
+        sha512 = "LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==";
+      };
+    };
+    "punycode-1.3.2" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz";
+        sha1 = "9653a036fb7c1ee42342f2325cceefea3926c48d";
+      };
+    };
+    "punycode-1.4.1" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz";
+        sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
+      };
+    };
+    "punycode-2.1.1" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz";
+        sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==";
+      };
+    };
+    "qs-0.6.6" = {
+      name = "qs";
+      packageName = "qs";
+      version = "0.6.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz";
+        sha1 = "6e015098ff51968b8a3c819001d5f2c89bc4b107";
+      };
+    };
+    "qs-6.5.2" = {
+      name = "qs";
+      packageName = "qs";
+      version = "6.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz";
+        sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==";
+      };
+    };
+    "querystring-0.2.0" = {
+      name = "querystring";
+      packageName = "querystring";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz";
+        sha1 = "b209849203bb25df820da756e747005878521620";
+      };
+    };
+    "querystring-es3-0.2.1" = {
+      name = "querystring-es3";
+      packageName = "querystring-es3";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz";
+        sha1 = "9ec61f79049875707d69414596fd907a4d711e73";
+      };
+    };
+    "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==";
+      };
+    };
+    "randomfill-1.0.4" = {
+      name = "randomfill";
+      packageName = "randomfill";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz";
+        sha512 = "87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==";
+      };
+    };
+    "read-only-stream-2.0.0" = {
+      name = "read-only-stream";
+      packageName = "read-only-stream";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz";
+        sha1 = "2724fd6a8113d73764ac288d4386270c1dbf17f0";
+      };
+    };
+    "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-2.3.6" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "2.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz";
+        sha512 = "tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==";
+      };
+    };
+    "rechoir-0.6.2" = {
+      name = "rechoir";
+      packageName = "rechoir";
+      version = "0.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz";
+        sha1 = "85204b54dba82d5742e28c96756ef43af50e3384";
+      };
+    };
+    "request-2.36.0" = {
+      name = "request";
+      packageName = "request";
+      version = "2.36.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/request/-/request-2.36.0.tgz";
+        sha1 = "28c6c04262c7b9ffdd21b9255374517ee6d943f5";
+      };
+    };
+    "request-2.88.0" = {
+      name = "request";
+      packageName = "request";
+      version = "2.88.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/request/-/request-2.88.0.tgz";
+        sha512 = "NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==";
+      };
+    };
+    "request-progress-0.3.1" = {
+      name = "request-progress";
+      packageName = "request-progress";
+      version = "0.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz";
+        sha1 = "0721c105d8a96ac6b2ce8b2c89ae2d5ecfcf6b3a";
+      };
+    };
+    "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";
+      };
+    };
+    "require-main-filename-1.0.1" = {
+      name = "require-main-filename";
+      packageName = "require-main-filename";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz";
+        sha1 = "97f717b69d48784f5f526a6c5aa8ffdda055a4d1";
+      };
+    };
+    "require-main-filename-2.0.0" = {
+      name = "require-main-filename";
+      packageName = "require-main-filename";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz";
+        sha512 = "NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==";
+      };
+    };
+    "resolve-1.1.7" = {
+      name = "resolve";
+      packageName = "resolve";
+      version = "1.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz";
+        sha1 = "203114d82ad2c5ed9e8e0411b3932875e889e97b";
+      };
+    };
+    "resolve-1.11.1" = {
+      name = "resolve";
+      packageName = "resolve";
+      version = "1.11.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz";
+        sha512 = "vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==";
+      };
+    };
+    "rimraf-2.2.8" = {
+      name = "rimraf";
+      packageName = "rimraf";
+      version = "2.2.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz";
+        sha1 = "e439be2aaee327321952730f99a8929e4fc50582";
+      };
+    };
+    "ripemd160-2.0.2" = {
+      name = "ripemd160";
+      packageName = "ripemd160";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz";
+        sha512 = "ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==";
+      };
+    };
+    "safe-buffer-5.1.2" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
+        sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
+      };
+    };
+    "safer-buffer-2.1.2" = {
+      name = "safer-buffer";
+      packageName = "safer-buffer";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
+        sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
+      };
+    };
+    "semver-1.1.4" = {
+      name = "semver";
+      packageName = "semver";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-1.1.4.tgz";
+        sha1 = "2e5a4e72bab03472cc97f72753b4508912ef5540";
+      };
+    };
+    "semver-5.7.0" = {
+      name = "semver";
+      packageName = "semver";
+      version = "5.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz";
+        sha512 = "Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==";
+      };
+    };
+    "set-blocking-2.0.0" = {
+      name = "set-blocking";
+      packageName = "set-blocking";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz";
+        sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
+      };
+    };
+    "sha.js-2.4.11" = {
+      name = "sha.js";
+      packageName = "sha.js";
+      version = "2.4.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz";
+        sha512 = "QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==";
+      };
+    };
+    "shasum-1.0.2" = {
+      name = "shasum";
+      packageName = "shasum";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz";
+        sha1 = "e7012310d8f417f4deb5712150e5678b87ae565f";
+      };
+    };
+    "shebang-command-1.2.0" = {
+      name = "shebang-command";
+      packageName = "shebang-command";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz";
+        sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea";
+      };
+    };
+    "shebang-regex-1.0.0" = {
+      name = "shebang-regex";
+      packageName = "shebang-regex";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz";
+        sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3";
+      };
+    };
+    "shell-quote-1.6.1" = {
+      name = "shell-quote";
+      packageName = "shell-quote";
+      version = "1.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz";
+        sha1 = "f4781949cce402697127430ea3b3c5476f481767";
+      };
+    };
+    "shelljs-0.3.0" = {
+      name = "shelljs";
+      packageName = "shelljs";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz";
+        sha1 = "3596e6307a781544f591f37da618360f31db57b1";
+      };
+    };
+    "should-equal-2.0.0" = {
+      name = "should-equal";
+      packageName = "should-equal";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz";
+        sha512 = "ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==";
+      };
+    };
+    "should-format-3.0.3" = {
+      name = "should-format";
+      packageName = "should-format";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz";
+        sha1 = "9bfc8f74fa39205c53d38c34d717303e277124f1";
+      };
+    };
+    "should-type-1.4.0" = {
+      name = "should-type";
+      packageName = "should-type";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz";
+        sha1 = "0756d8ce846dfd09843a6947719dfa0d4cff5cf3";
+      };
+    };
+    "should-type-adaptors-1.1.0" = {
+      name = "should-type-adaptors";
+      packageName = "should-type-adaptors";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz";
+        sha512 = "JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==";
+      };
+    };
+    "should-util-1.0.0" = {
+      name = "should-util";
+      packageName = "should-util";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/should-util/-/should-util-1.0.0.tgz";
+        sha1 = "c98cda374aa6b190df8ba87c9889c2b4db620063";
+      };
+    };
+    "signal-exit-3.0.2" = {
+      name = "signal-exit";
+      packageName = "signal-exit";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz";
+        sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d";
+      };
+    };
+    "simple-concat-1.0.0" = {
+      name = "simple-concat";
+      packageName = "simple-concat";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz";
+        sha1 = "7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6";
+      };
+    };
+    "sntp-0.2.4" = {
+      name = "sntp";
+      packageName = "sntp";
+      version = "0.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz";
+        sha1 = "fb885f18b0f3aad189f824862536bceeec750900";
+      };
+    };
+    "source-map-0.5.7" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.5.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz";
+        sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc";
+      };
+    };
+    "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==";
+      };
+    };
+    "sprintf-js-1.0.3" = {
+      name = "sprintf-js";
+      packageName = "sprintf-js";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz";
+        sha1 = "04e6926f662895354f3dd015203633b857297e2c";
+      };
+    };
+    "sshpk-1.16.1" = {
+      name = "sshpk";
+      packageName = "sshpk";
+      version = "1.16.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz";
+        sha512 = "HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==";
+      };
+    };
+    "stream-browserify-2.0.2" = {
+      name = "stream-browserify";
+      packageName = "stream-browserify";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz";
+        sha512 = "nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==";
+      };
+    };
+    "stream-combiner2-1.1.1" = {
+      name = "stream-combiner2";
+      packageName = "stream-combiner2";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz";
+        sha1 = "fb4d8a1420ea362764e21ad4780397bebcb41cbe";
+      };
+    };
+    "stream-http-2.8.3" = {
+      name = "stream-http";
+      packageName = "stream-http";
+      version = "2.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz";
+        sha512 = "+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==";
+      };
+    };
+    "stream-splicer-2.0.1" = {
+      name = "stream-splicer";
+      packageName = "stream-splicer";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz";
+        sha512 = "Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==";
+      };
+    };
+    "string-width-1.0.2" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
+        sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
+      };
+    };
+    "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-3.1.0" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz";
+        sha512 = "vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==";
+      };
+    };
+    "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.1.1" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
+        sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
+      };
+    };
+    "string_decoder-1.2.0" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz";
+        sha512 = "6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==";
+      };
+    };
+    "strip-ansi-3.0.1" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
+        sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
+      };
+    };
+    "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-5.2.0" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz";
+        sha512 = "DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==";
+      };
+    };
+    "strip-eof-1.0.0" = {
+      name = "strip-eof";
+      packageName = "strip-eof";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz";
+        sha1 = "bb43ff5598a6eb05d89b59fcd129c983313606bf";
+      };
+    };
+    "strip-json-comments-1.0.4" = {
+      name = "strip-json-comments";
+      packageName = "strip-json-comments";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz";
+        sha1 = "1e15fbcac97d3ee99bf2d73b4c656b082bbafb91";
+      };
+    };
+    "strip-json-comments-2.0.1" = {
+      name = "strip-json-comments";
+      packageName = "strip-json-comments";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz";
+        sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a";
+      };
+    };
+    "subarg-1.0.0" = {
+      name = "subarg";
+      packageName = "subarg";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz";
+        sha1 = "f62cf17581e996b48fc965699f54c06ae268b8d2";
+      };
+    };
+    "supports-color-5.5.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "5.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz";
+        sha512 = "QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==";
+      };
+    };
+    "supports-color-6.0.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "6.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz";
+        sha512 = "on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==";
+      };
+    };
+    "syntax-error-1.4.0" = {
+      name = "syntax-error";
+      packageName = "syntax-error";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz";
+        sha512 = "YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==";
+      };
+    };
+    "throttleit-0.0.2" = {
+      name = "throttleit";
+      packageName = "throttleit";
+      version = "0.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz";
+        sha1 = "cfedf88e60c00dd9697b61fdd2a8343a9b680eaf";
+      };
+    };
+    "through-2.3.8" = {
+      name = "through";
+      packageName = "through";
+      version = "2.3.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through/-/through-2.3.8.tgz";
+        sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5";
+      };
+    };
+    "through2-2.0.5" = {
+      name = "through2";
+      packageName = "through2";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz";
+        sha512 = "/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==";
+      };
+    };
+    "timers-browserify-1.4.2" = {
+      name = "timers-browserify";
+      packageName = "timers-browserify";
+      version = "1.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz";
+        sha1 = "c9c58b575be8407375cb5e2462dacee74359f41d";
+      };
+    };
+    "to-arraybuffer-1.0.1" = {
+      name = "to-arraybuffer";
+      packageName = "to-arraybuffer";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz";
+        sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43";
+      };
+    };
+    "tough-cookie-2.4.3" = {
+      name = "tough-cookie";
+      packageName = "tough-cookie";
+      version = "2.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz";
+        sha512 = "Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==";
+      };
+    };
+    "tough-cookie-3.0.1" = {
+      name = "tough-cookie";
+      packageName = "tough-cookie";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz";
+        sha512 = "yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==";
+      };
+    };
+    "tty-browserify-0.0.1" = {
+      name = "tty-browserify";
+      packageName = "tty-browserify";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz";
+        sha512 = "C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==";
+      };
+    };
+    "tunnel-agent-0.4.3" = {
+      name = "tunnel-agent";
+      packageName = "tunnel-agent";
+      version = "0.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz";
+        sha1 = "6373db76909fe570e08d73583365ed828a74eeeb";
+      };
+    };
+    "tunnel-agent-0.6.0" = {
+      name = "tunnel-agent";
+      packageName = "tunnel-agent";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
+        sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
+      };
+    };
+    "tweetnacl-0.14.5" = {
+      name = "tweetnacl";
+      packageName = "tweetnacl";
+      version = "0.14.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
+        sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
+      };
+    };
+    "type-detect-4.0.8" = {
+      name = "type-detect";
+      packageName = "type-detect";
+      version = "4.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz";
+        sha512 = "0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==";
+      };
+    };
+    "typedarray-0.0.6" = {
+      name = "typedarray";
+      packageName = "typedarray";
+      version = "0.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz";
+        sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777";
+      };
+    };
+    "umd-3.0.3" = {
+      name = "umd";
+      packageName = "umd";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz";
+        sha512 = "4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==";
+      };
+    };
+    "undeclared-identifiers-1.1.3" = {
+      name = "undeclared-identifiers";
+      packageName = "undeclared-identifiers";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz";
+        sha512 = "pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==";
+      };
+    };
+    "uri-js-4.2.2" = {
+      name = "uri-js";
+      packageName = "uri-js";
+      version = "4.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz";
+        sha512 = "KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==";
+      };
+    };
+    "url-0.11.0" = {
+      name = "url";
+      packageName = "url";
+      version = "0.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/url/-/url-0.11.0.tgz";
+        sha1 = "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1";
+      };
+    };
+    "util-0.10.3" = {
+      name = "util";
+      packageName = "util";
+      version = "0.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util/-/util-0.10.3.tgz";
+        sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9";
+      };
+    };
+    "util-0.10.4" = {
+      name = "util";
+      packageName = "util";
+      version = "0.10.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util/-/util-0.10.4.tgz";
+        sha512 = "0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==";
+      };
+    };
+    "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";
+      };
+    };
+    "uuid-3.3.2" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "3.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz";
+        sha512 = "yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==";
+      };
+    };
+    "verror-1.10.0" = {
+      name = "verror";
+      packageName = "verror";
+      version = "1.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
+        sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
+      };
+    };
+    "vm-browserify-1.1.0" = {
+      name = "vm-browserify";
+      packageName = "vm-browserify";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz";
+        sha512 = "iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==";
+      };
+    };
+    "which-1.0.9" = {
+      name = "which";
+      packageName = "which";
+      version = "1.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which/-/which-1.0.9.tgz";
+        sha1 = "460c1da0f810103d0321a9b633af9e575e64486f";
+      };
+    };
+    "which-1.3.1" = {
+      name = "which";
+      packageName = "which";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz";
+        sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==";
+      };
+    };
+    "which-module-2.0.0" = {
+      name = "which-module";
+      packageName = "which-module";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz";
+        sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a";
+      };
+    };
+    "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==";
+      };
+    };
+    "wrap-ansi-2.1.0" = {
+      name = "wrap-ansi";
+      packageName = "wrap-ansi";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz";
+        sha1 = "d8fc3d284dd05794fe84973caecdd1cf824fdd85";
+      };
+    };
+    "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.1" = {
+      name = "xtend";
+      packageName = "xtend";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz";
+        sha1 = "a5c6d532be656e23db820efb943a1f04998d63af";
+      };
+    };
+    "y18n-4.0.0" = {
+      name = "y18n";
+      packageName = "y18n";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz";
+        sha512 = "r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==";
+      };
+    };
+    "yargs-12.0.5" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "12.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz";
+        sha512 = "Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==";
+      };
+    };
+    "yargs-13.2.2" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "13.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz";
+        sha512 = "WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==";
+      };
+    };
+    "yargs-parser-11.1.1" = {
+      name = "yargs-parser";
+      packageName = "yargs-parser";
+      version = "11.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz";
+        sha512 = "C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==";
+      };
+    };
+    "yargs-parser-13.0.0" = {
+      name = "yargs-parser";
+      packageName = "yargs-parser";
+      version = "13.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz";
+        sha512 = "w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==";
+      };
+    };
+    "yargs-unparser-1.5.0" = {
+      name = "yargs-unparser";
+      packageName = "yargs-unparser";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz";
+        sha512 = "HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==";
+      };
+    };
+  };
+in
+{
+  marked = nodeEnv.buildNodePackage {
+    name = "marked";
+    packageName = "marked";
+    version = "0.6.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/marked/-/marked-0.6.2.tgz";
+      sha512 = "LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A markdown parser built for speed";
+      homepage = https://marked.js.org/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  browserify = nodeEnv.buildNodePackage {
+    name = "browserify";
+    packageName = "browserify";
+    version = "16.2.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz";
+      sha512 = "zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==";
+    };
+    dependencies = [
+      sources."JSONStream-1.3.5"
+      sources."acorn-6.1.1"
+      sources."acorn-dynamic-import-4.0.0"
+      sources."acorn-node-1.7.0"
+      sources."acorn-walk-6.1.1"
+      sources."array-filter-0.0.1"
+      sources."array-map-0.0.0"
+      sources."array-reduce-0.0.0"
+      sources."asn1.js-4.10.1"
+      (sources."assert-1.5.0" // {
+        dependencies = [
+          sources."inherits-2.0.1"
+          sources."util-0.10.3"
+        ];
+      })
+      sources."balanced-match-1.0.0"
+      sources."base64-js-1.3.0"
+      sources."bn.js-4.11.8"
+      sources."brace-expansion-1.1.11"
+      sources."brorand-1.1.0"
+      sources."browser-pack-6.1.0"
+      (sources."browser-resolve-1.11.3" // {
+        dependencies = [
+          sources."resolve-1.1.7"
+        ];
+      })
+      sources."browserify-aes-1.2.0"
+      sources."browserify-cipher-1.0.1"
+      sources."browserify-des-1.0.2"
+      sources."browserify-rsa-4.0.1"
+      sources."browserify-sign-4.0.4"
+      sources."browserify-zlib-0.2.0"
+      sources."buffer-5.2.1"
+      sources."buffer-from-1.1.1"
+      sources."buffer-xor-1.0.3"
+      sources."builtin-status-codes-3.0.0"
+      sources."cached-path-relative-1.0.2"
+      sources."cipher-base-1.0.4"
+      sources."combine-source-map-0.8.0"
+      sources."concat-map-0.0.1"
+      sources."concat-stream-1.6.2"
+      sources."console-browserify-1.1.0"
+      sources."constants-browserify-1.0.0"
+      sources."convert-source-map-1.1.3"
+      sources."core-util-is-1.0.2"
+      sources."create-ecdh-4.0.3"
+      sources."create-hash-1.2.0"
+      sources."create-hmac-1.1.7"
+      sources."crypto-browserify-3.12.0"
+      sources."dash-ast-1.0.0"
+      sources."date-now-0.1.4"
+      sources."defined-1.0.0"
+      sources."deps-sort-2.0.0"
+      sources."des.js-1.0.0"
+      (sources."detective-5.2.0" // {
+        dependencies = [
+          sources."minimist-1.2.0"
+        ];
+      })
+      sources."diffie-hellman-5.0.3"
+      sources."domain-browser-1.2.0"
+      sources."duplexer2-0.1.4"
+      sources."elliptic-6.4.1"
+      sources."events-2.1.0"
+      sources."evp_bytestokey-1.0.3"
+      sources."fs.realpath-1.0.0"
+      sources."function-bind-1.1.1"
+      sources."get-assigned-identifiers-1.2.0"
+      sources."glob-7.1.4"
+      sources."has-1.0.3"
+      sources."hash-base-3.0.4"
+      sources."hash.js-1.1.7"
+      sources."hmac-drbg-1.0.1"
+      sources."htmlescape-1.1.1"
+      sources."https-browserify-1.0.0"
+      sources."ieee754-1.1.13"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."inline-source-map-0.6.2"
+      sources."insert-module-globals-7.2.0"
+      sources."is-buffer-1.1.6"
+      sources."isarray-1.0.0"
+      sources."json-stable-stringify-0.0.1"
+      sources."jsonify-0.0.0"
+      sources."jsonparse-1.3.1"
+      sources."labeled-stream-splicer-2.0.2"
+      sources."lodash.memoize-3.0.4"
+      sources."md5.js-1.3.5"
+      sources."miller-rabin-4.0.1"
+      sources."minimalistic-assert-1.0.1"
+      sources."minimalistic-crypto-utils-1.0.1"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."module-deps-6.2.1"
+      sources."object-assign-4.1.1"
+      sources."once-1.4.0"
+      sources."os-browserify-0.3.0"
+      sources."pako-1.0.10"
+      sources."parents-1.0.1"
+      sources."parse-asn1-5.1.4"
+      sources."path-browserify-0.0.1"
+      sources."path-is-absolute-1.0.1"
+      sources."path-parse-1.0.6"
+      sources."path-platform-0.11.15"
+      sources."pbkdf2-3.0.17"
+      sources."process-0.11.10"
+      sources."process-nextick-args-2.0.0"
+      sources."public-encrypt-4.0.3"
+      sources."punycode-1.4.1"
+      sources."querystring-0.2.0"
+      sources."querystring-es3-0.2.1"
+      sources."randombytes-2.1.0"
+      sources."randomfill-1.0.4"
+      sources."read-only-stream-2.0.0"
+      (sources."readable-stream-2.3.6" // {
+        dependencies = [
+          sources."string_decoder-1.1.1"
+        ];
+      })
+      sources."resolve-1.11.1"
+      sources."ripemd160-2.0.2"
+      sources."safe-buffer-5.1.2"
+      sources."sha.js-2.4.11"
+      sources."shasum-1.0.2"
+      sources."shell-quote-1.6.1"
+      sources."simple-concat-1.0.0"
+      sources."source-map-0.5.7"
+      sources."stream-browserify-2.0.2"
+      sources."stream-combiner2-1.1.1"
+      sources."stream-http-2.8.3"
+      sources."stream-splicer-2.0.1"
+      sources."string_decoder-1.2.0"
+      (sources."subarg-1.0.0" // {
+        dependencies = [
+          sources."minimist-1.2.0"
+        ];
+      })
+      sources."syntax-error-1.4.0"
+      sources."through-2.3.8"
+      sources."through2-2.0.5"
+      sources."timers-browserify-1.4.2"
+      sources."to-arraybuffer-1.0.1"
+      sources."tty-browserify-0.0.1"
+      sources."typedarray-0.0.6"
+      sources."umd-3.0.3"
+      sources."undeclared-identifiers-1.1.3"
+      (sources."url-0.11.0" // {
+        dependencies = [
+          sources."punycode-1.3.2"
+        ];
+      })
+      sources."util-0.10.4"
+      sources."util-deprecate-1.0.2"
+      sources."vm-browserify-1.1.0"
+      sources."wrappy-1.0.2"
+      sources."xtend-4.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "browser-side require() the node way";
+      homepage = "https://github.com/browserify/browserify#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  uglify-js = nodeEnv.buildNodePackage {
+    name = "uglify-js";
+    packageName = "uglify-js";
+    version = "3.6.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz";
+      sha512 = "W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==";
+    };
+    dependencies = [
+      sources."commander-2.20.0"
+      sources."source-map-0.6.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "JavaScript parser, mangler/compressor and beautifier toolkit";
+      homepage = "https://github.com/mishoo/UglifyJS2#readme";
+      license = "BSD-2-Clause";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  less = nodeEnv.buildNodePackage {
+    name = "less";
+    packageName = "less";
+    version = "3.9.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/less/-/less-3.9.0.tgz";
+      sha512 = "31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==";
+    };
+    dependencies = [
+      sources."ajv-6.10.0"
+      sources."asap-2.0.6"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.8.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."caseless-0.12.0"
+      sources."clone-2.1.2"
+      sources."combined-stream-1.0.8"
+      sources."core-util-is-1.0.2"
+      sources."dashdash-1.14.1"
+      sources."delayed-stream-1.0.0"
+      sources."ecc-jsbn-0.1.2"
+      sources."errno-0.1.7"
+      sources."extend-3.0.2"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-2.0.1"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.3"
+      sources."getpass-0.1.7"
+      sources."graceful-fs-4.1.15"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.1.3"
+      sources."http-signature-1.2.0"
+      sources."image-size-0.5.5"
+      sources."is-typedarray-1.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.4.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsprim-1.4.1"
+      sources."mime-1.6.0"
+      sources."mime-db-1.40.0"
+      sources."mime-types-2.1.24"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."oauth-sign-0.9.0"
+      sources."performance-now-2.1.0"
+      sources."promise-7.3.1"
+      sources."prr-1.0.1"
+      sources."psl-1.1.32"
+      sources."punycode-2.1.1"
+      sources."qs-6.5.2"
+      sources."request-2.88.0"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."source-map-0.6.1"
+      sources."sshpk-1.16.1"
+      (sources."tough-cookie-2.4.3" // {
+        dependencies = [
+          sources."punycode-1.4.1"
+        ];
+      })
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."uri-js-4.2.2"
+      sources."uuid-3.3.2"
+      sources."verror-1.10.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Leaner CSS";
+      homepage = http://lesscss.org/;
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  mocha = nodeEnv.buildNodePackage {
+    name = "mocha";
+    packageName = "mocha";
+    version = "6.1.4";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/mocha/-/mocha-6.1.4.tgz";
+      sha512 = "PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg==";
+    };
+    dependencies = [
+      sources."ansi-colors-3.2.3"
+      sources."ansi-regex-3.0.0"
+      sources."ansi-styles-3.2.1"
+      sources."argparse-1.0.10"
+      sources."balanced-match-1.0.0"
+      sources."brace-expansion-1.1.11"
+      sources."browser-stdout-1.3.1"
+      sources."camelcase-5.3.1"
+      (sources."chalk-2.4.2" // {
+        dependencies = [
+          sources."supports-color-5.5.0"
+        ];
+      })
+      sources."cliui-4.1.0"
+      sources."code-point-at-1.1.0"
+      sources."color-convert-1.9.3"
+      sources."color-name-1.1.3"
+      sources."concat-map-0.0.1"
+      sources."cross-spawn-6.0.5"
+      sources."debug-3.2.6"
+      sources."decamelize-1.2.0"
+      sources."define-properties-1.1.3"
+      sources."diff-3.5.0"
+      sources."emoji-regex-7.0.3"
+      sources."end-of-stream-1.4.1"
+      sources."es-abstract-1.13.0"
+      sources."es-to-primitive-1.2.0"
+      sources."escape-string-regexp-1.0.5"
+      sources."esprima-4.0.1"
+      sources."execa-1.0.0"
+      sources."find-up-3.0.0"
+      sources."flat-4.1.0"
+      sources."fs.realpath-1.0.0"
+      sources."function-bind-1.1.1"
+      sources."get-caller-file-2.0.5"
+      sources."get-stream-4.1.0"
+      sources."glob-7.1.3"
+      sources."growl-1.10.5"
+      sources."has-1.0.3"
+      sources."has-flag-3.0.0"
+      sources."has-symbols-1.0.0"
+      sources."he-1.2.0"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."invert-kv-2.0.0"
+      sources."is-buffer-2.0.3"
+      sources."is-callable-1.1.4"
+      sources."is-date-object-1.0.1"
+      sources."is-fullwidth-code-point-2.0.0"
+      sources."is-regex-1.0.4"
+      sources."is-stream-1.1.0"
+      sources."is-symbol-1.0.2"
+      sources."isexe-2.0.0"
+      sources."js-yaml-3.13.1"
+      sources."lcid-2.0.0"
+      sources."locate-path-3.0.0"
+      sources."lodash-4.17.11"
+      sources."log-symbols-2.2.0"
+      sources."map-age-cleaner-0.1.3"
+      sources."mem-4.3.0"
+      sources."mimic-fn-2.1.0"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."ms-2.1.1"
+      sources."nice-try-1.0.5"
+      sources."node-environment-flags-1.0.5"
+      sources."npm-run-path-2.0.2"
+      sources."number-is-nan-1.0.1"
+      sources."object-keys-1.1.1"
+      sources."object.assign-4.1.0"
+      sources."object.getownpropertydescriptors-2.0.3"
+      sources."once-1.4.0"
+      sources."os-locale-3.1.0"
+      sources."p-defer-1.0.0"
+      sources."p-finally-1.0.0"
+      sources."p-is-promise-2.1.0"
+      sources."p-limit-2.2.0"
+      sources."p-locate-3.0.0"
+      sources."p-try-2.2.0"
+      sources."path-exists-3.0.0"
+      sources."path-is-absolute-1.0.1"
+      sources."path-key-2.0.1"
+      sources."pump-3.0.0"
+      sources."require-directory-2.1.1"
+      sources."require-main-filename-2.0.0"
+      sources."semver-5.7.0"
+      sources."set-blocking-2.0.0"
+      sources."shebang-command-1.2.0"
+      sources."shebang-regex-1.0.0"
+      sources."signal-exit-3.0.2"
+      sources."sprintf-js-1.0.3"
+      sources."string-width-2.1.1"
+      sources."strip-ansi-4.0.0"
+      sources."strip-eof-1.0.0"
+      sources."strip-json-comments-2.0.1"
+      sources."supports-color-6.0.0"
+      sources."which-1.3.1"
+      sources."which-module-2.0.0"
+      sources."wide-align-1.1.3"
+      (sources."wrap-ansi-2.1.0" // {
+        dependencies = [
+          sources."ansi-regex-2.1.1"
+          sources."is-fullwidth-code-point-1.0.0"
+          sources."string-width-1.0.2"
+          sources."strip-ansi-3.0.1"
+        ];
+      })
+      sources."wrappy-1.0.2"
+      sources."y18n-4.0.0"
+      (sources."yargs-13.2.2" // {
+        dependencies = [
+          sources."ansi-regex-4.1.0"
+          sources."string-width-3.1.0"
+          sources."strip-ansi-5.2.0"
+        ];
+      })
+      sources."yargs-parser-13.0.0"
+      (sources."yargs-unparser-1.5.0" // {
+        dependencies = [
+          sources."get-caller-file-1.0.3"
+          sources."require-main-filename-1.0.1"
+          sources."yargs-12.0.5"
+          sources."yargs-parser-11.1.1"
+        ];
+      })
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "simple, flexible, fun test framework";
+      homepage = https://mochajs.org/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  mocha-phantomjs = nodeEnv.buildNodePackage {
+    name = "mocha-phantomjs";
+    packageName = "mocha-phantomjs";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/mocha-phantomjs/-/mocha-phantomjs-4.1.0.tgz";
+      sha1 = "c75e16612e1a6af0ad8d281e3a2fef49d55e505b";
+    };
+    dependencies = [
+      sources."abbrev-1.1.1"
+      sources."adm-zip-0.2.1"
+      sources."asn1-0.1.11"
+      sources."assert-plus-0.1.5"
+      sources."async-0.9.2"
+      sources."aws-sign2-0.5.0"
+      sources."boom-0.4.2"
+      sources."combined-stream-0.0.7"
+      sources."commander-2.20.0"
+      (sources."config-chain-1.1.12" // {
+        dependencies = [
+          sources."ini-1.3.5"
+        ];
+      })
+      sources."cryptiles-0.2.2"
+      sources."ctype-0.5.3"
+      sources."delayed-stream-0.0.5"
+      sources."forever-agent-0.5.2"
+      sources."form-data-0.1.4"
+      sources."hawk-1.0.0"
+      sources."hoek-0.9.1"
+      sources."http-signature-0.10.1"
+      sources."inherits-1.0.2"
+      sources."ini-1.1.0"
+      sources."ip-regex-2.1.0"
+      sources."json-stringify-safe-5.0.1"
+      sources."kew-0.1.7"
+      sources."mime-1.2.11"
+      sources."mkdirp-0.3.5"
+      sources."mocha-phantomjs-core-1.3.1"
+      sources."ncp-0.4.2"
+      sources."node-uuid-1.4.8"
+      sources."nopt-2.2.1"
+      sources."npmconf-0.0.24"
+      sources."oauth-sign-0.3.0"
+      sources."once-1.1.1"
+      sources."osenv-0.0.3"
+      sources."phantomjs-1.9.7-15"
+      sources."progress-1.1.8"
+      sources."proto-list-1.2.4"
+      sources."psl-1.1.32"
+      sources."punycode-2.1.1"
+      sources."qs-0.6.6"
+      sources."request-2.36.0"
+      sources."request-progress-0.3.1"
+      sources."rimraf-2.2.8"
+      sources."semver-1.1.4"
+      sources."sntp-0.2.4"
+      sources."throttleit-0.0.2"
+      sources."tough-cookie-3.0.1"
+      sources."tunnel-agent-0.4.3"
+      sources."which-1.0.9"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Run mocha browser tests in phantomjs via the command line";
+      homepage = "https://github.com/nathanboktae/mocha-phantomjs#readme";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  should = nodeEnv.buildNodePackage {
+    name = "should";
+    packageName = "should";
+    version = "13.2.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/should/-/should-13.2.3.tgz";
+      sha512 = "ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==";
+    };
+    dependencies = [
+      sources."should-equal-2.0.0"
+      sources."should-format-3.0.3"
+      sources."should-type-1.4.0"
+      sources."should-type-adaptors-1.1.0"
+      sources."should-util-1.0.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "test framework agnostic BDD-style assertions";
+      homepage = https://github.com/shouldjs/should.js;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  sinon = nodeEnv.buildNodePackage {
+    name = "sinon";
+    packageName = "sinon";
+    version = "7.3.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/sinon/-/sinon-7.3.2.tgz";
+      sha512 = "thErC1z64BeyGiPvF8aoSg0LEnptSaWE7YhdWWbWXgelOyThent7uKOnnEh9zBxDbKixtr5dEko+ws1sZMuFMA==";
+    };
+    dependencies = [
+      sources."@sinonjs/commons-1.4.0"
+      sources."@sinonjs/formatio-3.2.1"
+      sources."@sinonjs/samsam-3.3.1"
+      sources."@sinonjs/text-encoding-0.7.1"
+      sources."array-from-2.1.1"
+      sources."diff-3.5.0"
+      sources."has-flag-3.0.0"
+      sources."isarray-0.0.1"
+      sources."just-extend-4.0.2"
+      sources."lodash-4.17.11"
+      sources."lolex-4.1.0"
+      sources."nise-1.5.0"
+      sources."path-to-regexp-1.7.0"
+      sources."supports-color-5.5.0"
+      sources."type-detect-4.0.8"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "JavaScript test spies, stubs and mocks.";
+      homepage = https://sinonjs.org/;
+      license = "BSD-3-Clause";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  jshint = nodeEnv.buildNodePackage {
+    name = "jshint";
+    packageName = "jshint";
+    version = "2.10.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/jshint/-/jshint-2.10.2.tgz";
+      sha512 = "e7KZgCSXMJxznE/4WULzybCMNXNAd/bf5TSrvVEq78Q/K8ZwFpmBqQeDtNiHc3l49nV4E/+YeHU/JZjSUIrLAA==";
+    };
+    dependencies = [
+      sources."balanced-match-1.0.0"
+      sources."brace-expansion-1.1.11"
+      sources."cli-1.0.1"
+      sources."concat-map-0.0.1"
+      sources."console-browserify-1.1.0"
+      sources."core-util-is-1.0.2"
+      sources."date-now-0.1.4"
+      (sources."dom-serializer-0.1.1" // {
+        dependencies = [
+          sources."entities-1.1.2"
+        ];
+      })
+      sources."domelementtype-1.3.1"
+      sources."domhandler-2.3.0"
+      sources."domutils-1.5.1"
+      sources."entities-1.0.0"
+      sources."exit-0.1.2"
+      sources."fs.realpath-1.0.0"
+      sources."glob-7.1.4"
+      sources."htmlparser2-3.8.3"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."isarray-0.0.1"
+      sources."lodash-4.17.11"
+      sources."minimatch-3.0.4"
+      sources."once-1.4.0"
+      sources."path-is-absolute-1.0.1"
+      sources."readable-stream-1.1.14"
+      sources."shelljs-0.3.0"
+      sources."string_decoder-0.10.31"
+      sources."strip-json-comments-1.0.4"
+      sources."wrappy-1.0.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Static analysis tool for JavaScript";
+      homepage = http://jshint.com/;
+      license = "(MIT AND JSON)";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  shelljs = nodeEnv.buildNodePackage {
+    name = "shelljs";
+    packageName = "shelljs";
+    version = "0.8.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz";
+      sha512 = "fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==";
+    };
+    dependencies = [
+      sources."balanced-match-1.0.0"
+      sources."brace-expansion-1.1.11"
+      sources."concat-map-0.0.1"
+      sources."fs.realpath-1.0.0"
+      sources."glob-7.1.4"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."interpret-1.2.0"
+      sources."minimatch-3.0.4"
+      sources."once-1.4.0"
+      sources."path-is-absolute-1.0.1"
+      sources."path-parse-1.0.6"
+      sources."rechoir-0.6.2"
+      sources."resolve-1.11.1"
+      sources."wrappy-1.0.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Portable Unix shell commands for Node.js";
+      homepage = http://github.com/shelljs/shelljs;
+      license = "BSD-3-Clause";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/web/remarkjs/nodepkgs.nix b/nixpkgs/pkgs/development/web/remarkjs/nodepkgs.nix
new file mode 100644
index 000000000000..32c24174b5ec
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/remarkjs/nodepkgs.nix
@@ -0,0 +1,17 @@
+# This file has been generated by node2nix 1.7.0. Do not edit!
+
+{pkgs ? import <nixpkgs> {
+    inherit system;
+  }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-8_x"}:
+
+let
+  nodeEnv = import ../../node-packages/node-env.nix {
+    inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
+    inherit nodejs;
+    libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
+  };
+in
+import ./node-packages.nix {
+  inherit (pkgs) fetchurl fetchgit;
+  inherit nodeEnv;
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/web/remarkjs/pkgs.json b/nixpkgs/pkgs/development/web/remarkjs/pkgs.json
new file mode 100644
index 000000000000..516bcebc6f48
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/remarkjs/pkgs.json
@@ -0,0 +1,12 @@
+[
+  "marked"
+, "browserify"
+, "uglify-js"
+, "less"
+, "mocha"
+, "mocha-phantomjs"
+, "should"
+, "sinon"
+, "jshint"
+, "shelljs"
+]
diff --git a/nixpkgs/pkgs/development/web/twitter-bootstrap/3.nix b/nixpkgs/pkgs/development/web/twitter-bootstrap/3.nix
new file mode 100644
index 000000000000..71cda3d3d9fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/twitter-bootstrap/3.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  name = "bootstrap-${version}";
+  version = "3.4.1";
+
+  src = fetchurl {
+    url = "https://github.com/twbs/bootstrap/releases/download/v${version}/bootstrap-${version}-dist.zip";
+    sha256 = "0bnrxyryl4kyq250k4n2lxgkddfs9lxhqd6gq8x3kg9wfz7r75yl";
+  };
+
+  buildInputs = [ unzip ];
+
+  dontBuild = true;
+  installPhase = ''
+    mkdir $out
+    cp -r * $out/
+  '';
+
+  meta = {
+    description = "Front-end framework for faster and easier web development";
+    homepage = https://getbootstrap.com/;
+    license = stdenv.lib.licenses.mit;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/web/twitter-bootstrap/default.nix b/nixpkgs/pkgs/development/web/twitter-bootstrap/default.nix
new file mode 100644
index 000000000000..61e7947a4796
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/twitter-bootstrap/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "bootstrap";
+  version = "4.3.1";
+
+  src = fetchurl {
+    url = "https://github.com/twbs/bootstrap/releases/download/v${version}/${pname}-${version}-dist.zip";
+    sha256 = "08rkg4q8x36k03g1d81brhncrzb98sh8r53a5wg3i4p1nwqgv3w8";
+  };
+
+  buildInputs = [ unzip ];
+
+  dontBuild = true;
+  installPhase = ''
+    mkdir $out
+    cp -r * $out/
+  '';
+
+  meta = {
+    description = "Front-end framework for faster and easier web development";
+    homepage = https://getbootstrap.com/;
+    license = stdenv.lib.licenses.mit;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/web/valum/default.nix b/nixpkgs/pkgs/development/web/valum/default.nix
new file mode 100644
index 000000000000..266217d94e24
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/valum/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, meson, ninja, pkgconfig, fetchFromGitHub, glib, vala, ctpl
+, libgee, libsoup, fcgi }:
+
+stdenv.mkDerivation rec {
+  name = "valum-${version}";
+  version = "0.3.15";
+
+  src = fetchFromGitHub {
+    owner = "valum-framework";
+    repo = "valum";
+    rev = "v${version}";
+    sha256 = "1wk23aq5lxsqns58s4g9jrwx6wrk7k9hq9rg8jcs42rxn2pckaxw";
+  };
+
+  nativeBuildInputs = [ meson ninja pkgconfig ];
+  buildInputs = [ glib vala ctpl libgee libsoup fcgi ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/valum-framework/valum;
+    description = "Web micro-framework written in Vala";
+    license = licenses.lgpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.lethalman ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/web/wml/default.nix b/nixpkgs/pkgs/development/web/wml/default.nix
new file mode 100644
index 000000000000..82faf32a3210
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/wml/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchurl, perlPackages, ncurses, lynx, makeWrapper }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "wml";
+  version = "2.0.11";
+
+  src = fetchurl {
+    url = "http://thewml.org/distrib/wml-2.0.11.tar.gz";
+    sha256 = "0jjxpq91x7y2mgixz7ghqp01m24qa37wl3zz515rrzv7x8cyy4cf";
+  };
+
+  setOutputFlags = false;
+
+  # Getting lots of Non-ASCII character errors from pod2man.
+  # Inserting =encoding utf8 before the first =head occurrence.
+  # Wasn't able to fix mp4h.
+  preConfigure = ''
+    touch Makefile.PL
+    for i in wml_backend/p6_asubst/asubst.src wml_aux/freetable/freetable.src wml_docs/*.pod wml_include/des/*.src wml_include/fmt/*.src; do
+      sed -i '0,/^=head/{s/^=head/=encoding utf8\n=head/}' $i
+    done
+    sed -i 's/ doc / /g' wml_backend/p2_mp4h/Makefile.in
+    sed -i '/p2_mp4h\/doc/d' Makefile.in
+  '';
+
+  buildInputs = with perlPackages;
+    [ perl TermReadKey GD BitVector ncurses lynx makeWrapper ImageSize ];
+
+  patches = [ ./redhat-with-thr.patch ./dynaloader.patch ./no_bitvector.patch ];
+
+  hardeningDisable = [ "format" ];
+
+  postPatch = ''
+    substituteInPlace wml_frontend/wml.src \
+      --replace "File::PathConvert::realpath" "Cwd::realpath" \
+      --replace "File::PathConvert::abs2rel" "File::Spec->abs2rel" \
+      --replace "File::PathConvert" "File::Spec"
+
+    for i in wml_include/des/imgbg.src wml_include/des/imgdot.src; do
+      substituteInPlace $i \
+        --replace "WML::GD" "GD"
+    done
+
+    rm wml_test/t/11-wmk.t
+  '';
+
+  preFixup = ''
+    wrapProgram $out/bin/wml \
+      --set PERL5LIB ${with perlPackages; makePerlPath [
+        BitVector TermReadKey ImageSize
+      ]}
+  '';
+
+  enableParallelBuilding = false;
+
+  installTargets = "install";
+
+  meta = with stdenv.lib; {
+    homepage = http://thewml.org/;
+    description = "Off-line HTML generation toolkit for Unix";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/web/wml/dynaloader.patch b/nixpkgs/pkgs/development/web/wml/dynaloader.patch
new file mode 100644
index 000000000000..89b9f0427f9b
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/wml/dynaloader.patch
@@ -0,0 +1,11 @@
+--- a/wml_backend/p3_eperl/configure	2009-10-03 19:12:29.000000000 -0500
++++ b/wml_backend/p3_eperl/configure	2009-10-03 19:12:45.000000000 -0500
+@@ -678,7 +678,7 @@
+ #define HAVE_PERL_DYNALOADER 1
+ EOF
+ 
+-        perl_dla=$perl_archlib/auto/DynaLoader/DynaLoader.a
++        perl_dla=$perl_archlib/CORE/libperl.so
+         ;;
+     * )
+         rc=no
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/web/wml/no_bitvector.patch b/nixpkgs/pkgs/development/web/wml/no_bitvector.patch
new file mode 100644
index 000000000000..d5fe926c4c7d
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/wml/no_bitvector.patch
@@ -0,0 +1,10 @@
+--- a/wml_common/Makefile.in	2014-12-17 00:28:25.156736048 +0100
++++ b/wml_common/Makefile.in	2014-12-17 00:28:30.501817958 +0100
+@@ -45,7 +45,6 @@
+      have_gd=0
+ 
+ SUBDIRS = \
+-     bitvector \
+      filepathconvert \
+      gd \
+      getoptlong \
diff --git a/nixpkgs/pkgs/development/web/wml/redhat-with-thr.patch b/nixpkgs/pkgs/development/web/wml/redhat-with-thr.patch
new file mode 100644
index 000000000000..4b06ccb3f56a
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/wml/redhat-with-thr.patch
@@ -0,0 +1,19 @@
+Description: Fix FTBFS with Perl 5.16
+ Patch taken from Fedora
+Debian-Bug: 676263
+Fedora-Bug: 839609
+Author: Jitka Plesnikova
+Origin: https://bugzilla.redhat.com/show_bug.cgi?id=839609
+
+--- a/wml_backend/p3_eperl/eperl_perl5.h 2012-07-27 10:49:27.048508799 +0200
++++ b/wml_backend/p3_eperl/eperl_perl5.h 2012-07-27 10:50:16.288714291 +0200
+@@ -72,9 +72,6 @@ 
+ #  define PL_curstash curstash
+ #endif
+ 
+-#ifndef WITH_THR
+-#  define PL_defoutgv defoutgv
+-#endif
+ 
+ /*  
+   Initialization of locales when building a new Perl interpreter.
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/web/woff2/default.nix b/nixpkgs/pkgs/development/web/woff2/default.nix
new file mode 100644
index 000000000000..bda6dab14d8a
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/woff2/default.nix
@@ -0,0 +1,32 @@
+{ brotli, cmake, fetchFromGitHub, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "woff2-${version}";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "woff2";
+    rev = "v${version}";
+    sha256 = "13l4g536h0pr84ww4wxs2za439s0xp1va55g6l478rfbb1spp44y";
+  };
+
+  outputs = [ "out" "dev" "lib" ];
+
+  nativeBuildInputs = [ cmake ];
+
+  propagatedBuildInputs = [ brotli ];
+
+  # without this binaries only get built if shared libs are disable
+  patchPhase = ''
+    sed 's@^if (NOT BUILD_SHARED_LIBS)$@if (TRUE)@g' -i CMakeLists.txt
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Webfont compression reference code";
+    homepage = https://github.com/google/woff2;
+    license = licenses.mit;
+    maintainers = [ maintainers.hrdinka ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/web/xmlindent/default.nix b/nixpkgs/pkgs/development/web/xmlindent/default.nix
new file mode 100644
index 000000000000..f0966357d93d
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/xmlindent/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, flex }:
+
+stdenv.mkDerivation rec {
+  name = "xmlindent-${version}";
+  version = "0.2.17";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/xmlindent/xmlindent/${version}/${name}.tar.gz";
+    sha256 = "0k15rxh51a5r4bvfm6c4syxls8al96cx60a9mn6pn24nns3nh3rs";
+  };
+
+  buildInputs = [ flex ];
+
+  preConfigure = ''
+    substituteInPlace Makefile --replace "PREFIX=/usr/local" "PREFIX=$out"
+  '';
+
+  meta = {
+    description = "XML stream reformatter";
+    homepage = http://xmlindent.sourceforge.net/;
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.ocharles ];
+  };
+}