ic-nix icon indicating copy to clipboard operation
ic-nix copied to clipboard

Can wasmtime and mops be added to the shell environment, please?

Open Pitometsu opened this issue 2 years ago • 3 comments

Pitometsu avatar May 23 '23 15:05 Pitometsu

E.g. this works, but can be refactored (I'm not so good at nix to write it better):
--- dfx-env.nix	2023-05-24 16:07:34.361245652 +0300
+++ dfx-env.nix	2023-05-24 15:58:54.687401113 +0300
@@ -87,6 +87,3505 @@
     mkShell ({
       nobuildPhase = "touch $out";
       nativeBuildInputs = [ drv ];
+      buildInputs = [
+        (let
+	  nodeEnv =
+	    let
+	      # Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master
+	      utillinux = if pkgs ? utillinux then pkgs.utillinux else pkgs.util-linux;
+
+	      python = if nodejs ? python then nodejs.python else python2;
+
+	      # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
+	      tarWrapper = runCommand "tarWrapper" {} ''
+		mkdir -p $out/bin
+
+		cat > $out/bin/tar <<EOF
+		#! ${stdenv.shell} -e
+		$(type -p tar) "\$@" --warning=no-unknown-keyword --delay-directory-restore
+		EOF
+
+		chmod +x $out/bin/tar
+	      '';
+
+	      # Function that generates a TGZ file from a NPM project
+	      buildNodeSourceDist =
+		{ name, version, src, ... }:
+
+		stdenv.mkDerivation {
+		  name = "node-tarball-${name}-${version}";
+		  inherit src;
+		  buildInputs = [ nodejs ];
+		  buildPhase = ''
+		    export HOME=$TMPDIR
+		    tgzFile=$(npm pack | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts)
+		  '';
+		  installPhase = ''
+		    mkdir -p $out/tarballs
+		    mv $tgzFile $out/tarballs
+		    mkdir -p $out/nix-support
+		    echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products
+		  '';
+		};
+
+	      # Common shell logic
+	      installPackage = writeShellScript "install-package" ''
+		installPackage() {
+		  local packageName=$1 src=$2
+
+		  local strippedName
+
+		  local DIR=$PWD
+		  cd $TMPDIR
+
+		  unpackFile $src
+
+		  # Make the base dir in which the target dependency resides first
+		  mkdir -p "$(dirname "$DIR/$packageName")"
+
+		  if [ -f "$src" ]
+		  then
+		      # Figure out what directory has been unpacked
+		      packageDir="$(find . -maxdepth 1 -type d | tail -1)"
+
+		      # Restore write permissions to make building work
+		      find "$packageDir" -type d -exec chmod u+x {} \;
+		      chmod -R u+w "$packageDir"
+
+		      # Move the extracted tarball into the output folder
+		      mv "$packageDir" "$DIR/$packageName"
+		  elif [ -d "$src" ]
+		  then
+		      # Get a stripped name (without hash) of the source directory.
+		      # On old nixpkgs it's already set internally.
+		      if [ -z "$strippedName" ]
+		      then
+			  strippedName="$(stripHash $src)"
+		      fi
+
+		      # Restore write permissions to make building work
+		      chmod -R u+w "$strippedName"
+
+		      # Move the extracted directory into the output folder
+		      mv "$strippedName" "$DIR/$packageName"
+		  fi
+
+		  # Change to the package directory to install dependencies
+		  cd "$DIR/$packageName"
+		}
+	      '';
+
+	      # Bundle the dependencies of the package
+	      #
+	      # Only include dependencies if they don't exist. They may also be bundled in the package.
+	      includeDependencies = {dependencies}:
+		lib.optionalString (dependencies != []) (
+		  ''
+		    mkdir -p node_modules
+		    cd node_modules
+		  ''
+		  + (lib.concatMapStrings (dependency:
+		    ''
+		      if [ ! -e "${dependency.packageName}" ]; then
+			  ${composePackage dependency}
+		      fi
+		    ''
+		  ) dependencies)
+		  + ''
+		    cd ..
+		  ''
+		);
+
+	      # Recursively composes the dependencies of a package
+	      composePackage = { name, packageName, src, dependencies ? [], ... }@args:
+		builtins.addErrorContext "while evaluating node package '${packageName}'" ''
+		  installPackage "${packageName}" "${src}"
+		  ${includeDependencies { inherit dependencies; }}
+		  cd ..
+		  ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+		'';
+
+	      pinpointDependencies = {dependencies, production}:
+		let
+		  pinpointDependenciesFromPackageJSON = writeTextFile {
+		    name = "pinpointDependencies.js";
+		    text = ''
+		      var fs = require('fs');
+		      var path = require('path');
+
+		      function resolveDependencyVersion(location, name) {
+			  if(location == process.env['NIX_STORE']) {
+			      return null;
+			  } else {
+			      var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
+
+			      if(fs.existsSync(dependencyPackageJSON)) {
+				  var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
+
+				  if(dependencyPackageObj.name == name) {
+				      return dependencyPackageObj.version;
+				  }
+			      } else {
+				  return resolveDependencyVersion(path.resolve(location, ".."), name);
+			      }
+			  }
+		      }
+
+		      function replaceDependencies(dependencies) {
+			  if(typeof dependencies == "object" && dependencies !== null) {
+			      for(var dependency in dependencies) {
+				  var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
+
+				  if(resolvedVersion === null) {
+				      process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
+				  } else {
+				      dependencies[dependency] = resolvedVersion;
+				  }
+			      }
+			  }
+		      }
+
+		      /* Read the package.json configuration */
+		      var packageObj = JSON.parse(fs.readFileSync('./package.json'));
+
+		      /* Pinpoint all dependencies */
+		      replaceDependencies(packageObj.dependencies);
+		      if(process.argv[2] == "development") {
+			  replaceDependencies(packageObj.devDependencies);
+		      }
+		      else {
+			  packageObj.devDependencies = {};
+		      }
+		      replaceDependencies(packageObj.optionalDependencies);
+		      replaceDependencies(packageObj.peerDependencies);
+
+		      /* Write the fixed package.json file */
+		      fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
+		    '';
+		  };
+		in
+		''
+		  node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"}
+
+		  ${lib.optionalString (dependencies != [])
+		    ''
+		      if [ -d node_modules ]
+		      then
+			  cd node_modules
+			  ${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies}
+			  cd ..
+		      fi
+		    ''}
+		'';
+
+	      # Recursively traverses all dependencies of a package and pinpoints all
+	      # dependencies in the package.json file to the versions that are actually
+	      # being used.
+
+	      pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args:
+		''
+		  if [ -d "${packageName}" ]
+		  then
+		      cd "${packageName}"
+		      ${pinpointDependencies { inherit dependencies production; }}
+		      cd ..
+		      ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+		  fi
+		'';
+
+	      # Extract the Node.js source code which is used to compile packages with
+	      # native bindings
+	      nodeSources = runCommand "node-sources" {} ''
+		tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
+		mv node-* $out
+	      '';
+
+	      # Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty)
+	      addIntegrityFieldsScript = writeTextFile {
+		name = "addintegrityfields.js";
+		text = ''
+		  var fs = require('fs');
+		  var path = require('path');
+
+		  function augmentDependencies(baseDir, dependencies) {
+		      for(var dependencyName in dependencies) {
+			  var dependency = dependencies[dependencyName];
+
+			  // Open package.json and augment metadata fields
+			  var packageJSONDir = path.join(baseDir, "node_modules", dependencyName);
+			  var packageJSONPath = path.join(packageJSONDir, "package.json");
+
+			  if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored
+			      console.log("Adding metadata fields to: "+packageJSONPath);
+			      var packageObj = JSON.parse(fs.readFileSync(packageJSONPath));
+
+			      if(dependency.integrity) {
+				  packageObj["_integrity"] = dependency.integrity;
+			      } else {
+				  packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads.
+			      }
+
+			      if(dependency.resolved) {
+				  packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided
+			      } else {
+				  packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
+			      }
+
+			      if(dependency.from !== undefined) { // Adopt from property if one has been provided
+				  packageObj["_from"] = dependency.from;
+			      }
+
+			      fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2));
+			  }
+
+			  // Augment transitive dependencies
+			  if(dependency.dependencies !== undefined) {
+			      augmentDependencies(packageJSONDir, dependency.dependencies);
+			  }
+		      }
+		  }
+
+		  if(fs.existsSync("./package-lock.json")) {
+		      var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
+
+		      if(![1, 2].includes(packageLock.lockfileVersion)) {
+			process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n");
+			process.exit(1);
+		      }
+
+		      if(packageLock.dependencies !== undefined) {
+			  augmentDependencies(".", packageLock.dependencies);
+		      }
+		  }
+		'';
+	      };
+
+	      # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
+	      reconstructPackageLock = writeTextFile {
+		name = "reconstructpackagelock.js";
+		text = ''
+		  var fs = require('fs');
+		  var path = require('path');
+
+		  var packageObj = JSON.parse(fs.readFileSync("package.json"));
+
+		  var lockObj = {
+		      name: packageObj.name,
+		      version: packageObj.version,
+		      lockfileVersion: 2,
+		      requires: true,
+		      packages: {
+			  "": {
+			      name: packageObj.name,
+			      version: packageObj.version,
+			      license: packageObj.license,
+			      bin: packageObj.bin,
+			      dependencies: packageObj.dependencies,
+			      engines: packageObj.engines,
+			      optionalDependencies: packageObj.optionalDependencies
+			  }
+		      },
+		      dependencies: {}
+		  };
+
+		  function augmentPackageJSON(filePath, packages, dependencies) {
+		      var packageJSON = path.join(filePath, "package.json");
+		      if(fs.existsSync(packageJSON)) {
+			  var packageObj = JSON.parse(fs.readFileSync(packageJSON));
+			  packages[filePath] = {
+			      version: packageObj.version,
+			      integrity: "sha1-000000000000000000000000000=",
+			      dependencies: packageObj.dependencies,
+			      engines: packageObj.engines,
+			      optionalDependencies: packageObj.optionalDependencies
+			  };
+			  dependencies[packageObj.name] = {
+			      version: packageObj.version,
+			      integrity: "sha1-000000000000000000000000000=",
+			      dependencies: {}
+			  };
+			  processDependencies(path.join(filePath, "node_modules"), packages, dependencies[packageObj.name].dependencies);
+		      }
+		  }
+
+		  function processDependencies(dir, packages, dependencies) {
+		      if(fs.existsSync(dir)) {
+			  var files = fs.readdirSync(dir);
+
+			  files.forEach(function(entry) {
+			      var filePath = path.join(dir, entry);
+			      var stats = fs.statSync(filePath);
+
+			      if(stats.isDirectory()) {
+				  if(entry.substr(0, 1) == "@") {
+				      // When we encounter a namespace folder, augment all packages belonging to the scope
+				      var pkgFiles = fs.readdirSync(filePath);
+
+				      pkgFiles.forEach(function(entry) {
+					  if(stats.isDirectory()) {
+					      var pkgFilePath = path.join(filePath, entry);
+					      augmentPackageJSON(pkgFilePath, packages, dependencies);
+					  }
+				      });
+				  } else {
+				      augmentPackageJSON(filePath, packages, dependencies);
+				  }
+			      }
+			  });
+		      }
+		  }
+
+		  processDependencies("node_modules", lockObj.packages, lockObj.dependencies);
+
+		  fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
+		'';
+	      };
+
+	      # Script that links bins defined in package.json to the node_modules bin directory
+	      # NPM does not do this for top-level packages itself anymore as of v7
+	      linkBinsScript = writeTextFile {
+		name = "linkbins.js";
+		text = ''
+		  var fs = require('fs');
+		  var path = require('path');
+
+		  var packageObj = JSON.parse(fs.readFileSync("package.json"));
+
+		  var nodeModules = Array(packageObj.name.split("/").length).fill("..").join(path.sep);
+
+		  if(packageObj.bin !== undefined) {
+		      fs.mkdirSync(path.join(nodeModules, ".bin"))
+
+		      if(typeof packageObj.bin == "object") {
+			  Object.keys(packageObj.bin).forEach(function(exe) {
+			      if(fs.existsSync(packageObj.bin[exe])) {
+				  console.log("linking bin '" + exe + "'");
+				  fs.symlinkSync(
+				      path.join("..", packageObj.name, packageObj.bin[exe]),
+				      path.join(nodeModules, ".bin", exe)
+				  );
+			      }
+			      else {
+				  console.log("skipping non-existent bin '" + exe + "'");
+			      }
+			  })
+		      }
+		      else {
+			  if(fs.existsSync(packageObj.bin)) {
+			      console.log("linking bin '" + packageObj.bin + "'");
+			      fs.symlinkSync(
+				  path.join("..", packageObj.name, packageObj.bin),
+				  path.join(nodeModules, ".bin", packageObj.name.split("/").pop())
+			      );
+			  }
+			  else {
+			      console.log("skipping non-existent bin '" + packageObj.bin + "'");
+			  }
+		      }
+		  }
+		  else if(packageObj.directories !== undefined && packageObj.directories.bin !== undefined) {
+		      fs.mkdirSync(path.join(nodeModules, ".bin"))
+
+		      fs.readdirSync(packageObj.directories.bin).forEach(function(exe) {
+			  if(fs.existsSync(path.join(packageObj.directories.bin, exe))) {
+			      console.log("linking bin '" + exe + "'");
+			      fs.symlinkSync(
+				  path.join("..", packageObj.name, packageObj.directories.bin, exe),
+				  path.join(nodeModules, ".bin", exe)
+			      );
+			  }
+			  else {
+			      console.log("skipping non-existent bin '" + exe + "'");
+			  }
+		      })
+		  }
+		'';
+	      };
+
+	      prepareAndInvokeNPM = {packageName, bypassCache, reconstructLock, npmFlags, production}:
+		let
+		  forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
+		in
+		''
+		    # Pinpoint the versions of all dependencies to the ones that are actually being used
+		    echo "pinpointing versions of dependencies..."
+		    source $pinpointDependenciesScriptPath
+
+		    # Patch the shebangs of the bundled modules to prevent them from
+		    # calling executables outside the Nix store as much as possible
+		    patchShebangs .
+
+		    # Deploy the Node.js package by running npm install. Since the
+		    # dependencies have been provided already by ourselves, it should not
+		    # attempt to install them again, which is good, because we want to make
+		    # it Nix's responsibility. If it needs to install any dependencies
+		    # anyway (e.g. because the dependency parameters are
+		    # incomplete/incorrect), it fails.
+		    #
+		    # The other responsibilities of NPM are kept -- version checks, build
+		    # steps, postprocessing etc.
+
+		    export HOME=$TMPDIR
+		    cd "${packageName}"
+		    runHook preRebuild
+
+		    ${lib.optionalString bypassCache ''
+		      ${lib.optionalString reconstructLock ''
+			if [ -f package-lock.json ]
+			then
+			    echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!"
+			    echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!"
+			    rm package-lock.json
+			else
+			    echo "No package-lock.json file found, reconstructing..."
+			fi
+
+			node ${reconstructPackageLock}
+		      ''}
+
+		      node ${addIntegrityFieldsScript}
+		    ''}
+
+		    npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
+
+		    runHook postRebuild
+
+		    if [ "''${dontNpmInstall-}" != "1" ]
+		    then
+			# NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
+			rm -f npm-shrinkwrap.json
+
+			npm ${forceOfflineFlag} --nodedir=${nodeSources} --no-bin-links --ignore-scripts ${npmFlags} ${lib.optionalString production "--production"} install
+		    fi
+
+		    # Link executables defined in package.json
+		    node ${linkBinsScript}
+		'';
+
+	      # Builds and composes an NPM package including all its dependencies
+	      buildNodePackage =
+		{ name
+		, packageName
+		, version ? null
+		, dependencies ? []
+		, buildInputs ? []
+		, production ? true
+		, npmFlags ? ""
+		, dontNpmInstall ? false
+		, bypassCache ? false
+		, reconstructLock ? false
+		, preRebuild ? ""
+		, dontStrip ? true
+		, unpackPhase ? "true"
+		, buildPhase ? "true"
+		, meta ? {}
+		, ... }@args:
+
+		let
+		  extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" "meta" ];
+		in
+		stdenv.mkDerivation ({
+		  name = "${name}${if version == null then "" else "-${version}"}";
+		  buildInputs = [ tarWrapper python nodejs ]
+		    ++ lib.optional (stdenv.isLinux) utillinux
+		    ++ lib.optional (stdenv.isDarwin) libtool
+		    ++ buildInputs;
+
+		  inherit nodejs;
+
+		  inherit dontStrip; # Stripping may fail a build for some package deployments
+		  inherit dontNpmInstall preRebuild unpackPhase buildPhase;
+
+		  compositionScript = composePackage args;
+		  pinpointDependenciesScript = pinpointDependenciesOfPackage args;
+
+		  passAsFile = [ "compositionScript" "pinpointDependenciesScript" ];
+
+		  installPhase = ''
+		    source ${installPackage}
+
+		    # Create and enter a root node_modules/ folder
+		    mkdir -p $out/lib/node_modules
+		    cd $out/lib/node_modules
+
+		    # Compose the package and all its dependencies
+		    source $compositionScriptPath
+
+		    ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
+
+		    # Create symlink to the deployed executable folder, if applicable
+		    if [ -d "$out/lib/node_modules/.bin" ]
+		    then
+			ln -s $out/lib/node_modules/.bin $out/bin
+
+			# Patch the shebang lines of all the executables
+			ls $out/bin/* | while read i
+			do
+			    file="$(readlink -f "$i")"
+			    chmod u+rwx "$file"
+			    patchShebangs "$file"
+			done
+		    fi
+
+		    # Create symlinks to the deployed manual page folders, if applicable
+		    if [ -d "$out/lib/node_modules/${packageName}/man" ]
+		    then
+			mkdir -p $out/share
+			for dir in "$out/lib/node_modules/${packageName}/man/"*
+			do
+			    mkdir -p $out/share/man/$(basename "$dir")
+			    for page in "$dir"/*
+			    do
+				ln -s $page $out/share/man/$(basename "$dir")
+			    done
+			done
+		    fi
+
+		    # Run post install hook, if provided
+		    runHook postInstall
+		  '';
+
+		  meta = {
+		    # default to Node.js' platforms
+		    platforms = nodejs.meta.platforms;
+		  } // meta;
+		} // extraArgs);
+
+	      # Builds a node environment (a node_modules folder and a set of binaries)
+	      buildNodeDependencies =
+		{ name
+		, packageName
+		, version ? null
+		, src
+		, dependencies ? []
+		, buildInputs ? []
+		, production ? true
+		, npmFlags ? ""
+		, dontNpmInstall ? false
+		, bypassCache ? false
+		, reconstructLock ? false
+		, dontStrip ? true
+		, unpackPhase ? "true"
+		, buildPhase ? "true"
+		, ... }@args:
+
+		let
+		  extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ];
+		in
+		  stdenv.mkDerivation ({
+		    name = "node-dependencies-${name}${if version == null then "" else "-${version}"}";
+
+		    buildInputs = [ tarWrapper python nodejs ]
+		      ++ lib.optional (stdenv.isLinux) utillinux
+		      ++ lib.optional (stdenv.isDarwin) libtool
+		      ++ buildInputs;
+
+		    inherit dontStrip; # Stripping may fail a build for some package deployments
+		    inherit dontNpmInstall unpackPhase buildPhase;
+
+		    includeScript = includeDependencies { inherit dependencies; };
+		    pinpointDependenciesScript = pinpointDependenciesOfPackage args;
+
+		    passAsFile = [ "includeScript" "pinpointDependenciesScript" ];
+
+		    installPhase = ''
+		      source ${installPackage}
+
+		      mkdir -p $out/${packageName}
+		      cd $out/${packageName}
+
+		      source $includeScriptPath
+
+		      # Create fake package.json to make the npm commands work properly
+		      cp ${src}/package.json .
+		      chmod 644 package.json
+		      ${lib.optionalString bypassCache ''
+			if [ -f ${src}/package-lock.json ]
+			then
+			    cp ${src}/package-lock.json .
+			    chmod 644 package-lock.json
+			fi
+		      ''}
+
+		      # Go to the parent folder to make sure that all packages are pinpointed
+		      cd ..
+		      ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
+		      ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
+
+		      # Expose the executables that were installed
+		      cd ..
+		      ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
+		      mv ${packageName} lib
+		      ln -s $out/lib/node_modules/.bin $out/bin
+		    '';
+		  } // extraArgs);
+
+	      # Builds a development shell
+	      buildNodeShell =
+		{ name
+		, packageName
+		, version ? null
+		, src
+		, dependencies ? []
+		, buildInputs ? []
+		, production ? true
+		, npmFlags ? ""
+		, dontNpmInstall ? false
+		, bypassCache ? false
+		, reconstructLock ? false
+		, dontStrip ? true
+		, unpackPhase ? "true"
+		, buildPhase ? "true"
+		, ... }@args:
+
+		let
+		  nodeDependencies = buildNodeDependencies args;
+		  extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "unpackPhase" "buildPhase" ];
+		in
+		stdenv.mkDerivation ({
+		  name = "node-shell-${name}${if version == null then "" else "-${version}"}";
+
+		  buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs;
+		  buildCommand = ''
+		    mkdir -p $out/bin
+		    cat > $out/bin/shell <<EOF
+		    #! ${stdenv.shell} -e
+		    $shellHook
+		    exec ${stdenv.shell}
+		    EOF
+		    chmod +x $out/bin/shell
+		  '';
+
+		  # Provide the dependencies in a development shell through the NODE_PATH environment variable
+		  inherit nodeDependencies;
+		  shellHook = lib.optionalString (dependencies != []) ''
+		    export NODE_PATH=${nodeDependencies}/lib/node_modules
+		    export PATH="${nodeDependencies}/bin:$PATH"
+		  '';
+		} // extraArgs);
+	    in
+	    {
+	      buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist;
+	      buildNodePackage = lib.makeOverridable buildNodePackage;
+	      buildNodeDependencies = lib.makeOverridable buildNodeDependencies;
+	      buildNodeShell = lib.makeOverridable buildNodeShell;
+	    };
+	in
+
+	let
+	  sources = {
+	    "@dfinity/agent-0.11.3" = {
+	      name = "_at_dfinity_slash_agent";
+	      packageName = "@dfinity/agent";
+	      version = "0.11.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@dfinity/agent/-/agent-0.11.3.tgz";
+		sha512 = "pqiogLey6S83SG5BS93hBCtXfGRW6tkxa8Y0c9HwxOP/wRoVEuKHdTcOn7rL/HN4mDTwxkdqK4EC1Kv24S1q4Q==";
+	      };
+	    };
+	    "@dfinity/candid-0.11.3" = {
+	      name = "_at_dfinity_slash_candid";
+	      packageName = "@dfinity/candid";
+	      version = "0.11.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@dfinity/candid/-/candid-0.11.3.tgz";
+		sha512 = "xX7xNj2lLt7SIlvy0sqNp4fpcTD/xnwEu9APj0tnIF64cnsxIiS12T1Z8jl9g80jCQ1CbRPQf4cfsOfS3Cd2OA==";
+	      };
+	    };
+	    "@dfinity/identity-0.11.3" = {
+	      name = "_at_dfinity_slash_identity";
+	      packageName = "@dfinity/identity";
+	      version = "0.11.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@dfinity/identity/-/identity-0.11.3.tgz";
+		sha512 = "AXgrG6a7PxJmiZOC12ooKvPeOfh4+v3dR7D6jynLlN4qMy0ry+BMZhWkyjWrlRR3p8oMznzfjoMuKN5pOrBKDg==";
+	      };
+	    };
+	    "@dfinity/principal-0.11.3" = {
+	      name = "_at_dfinity_slash_principal";
+	      packageName = "@dfinity/principal";
+	      version = "0.11.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@dfinity/principal/-/principal-0.11.3.tgz";
+		sha512 = "+AJGDJ+RsveybSdxuTQFr2DPNZFpPfXnyixAOFWWdElVniSwnO/SwqQChR0AWvJdy/fKqoAXK+ZzyLG0uqSetA==";
+	      };
+	    };
+	    "@eslint-community/eslint-utils-4.2.0" = {
+	      name = "_at_eslint-community_slash_eslint-utils";
+	      packageName = "@eslint-community/eslint-utils";
+	      version = "4.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz";
+		sha512 = "gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==";
+	      };
+	    };
+	    "@eslint-community/regexpp-4.4.0" = {
+	      name = "_at_eslint-community_slash_regexpp";
+	      packageName = "@eslint-community/regexpp";
+	      version = "4.4.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz";
+		sha512 = "A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==";
+	      };
+	    };
+	    "@eslint/eslintrc-2.0.1" = {
+	      name = "_at_eslint_slash_eslintrc";
+	      packageName = "@eslint/eslintrc";
+	      version = "2.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz";
+		sha512 = "eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==";
+	      };
+	    };
+	    "@eslint/js-8.36.0" = {
+	      name = "_at_eslint_slash_js";
+	      packageName = "@eslint/js";
+	      version = "8.36.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz";
+		sha512 = "lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==";
+	      };
+	    };
+	    "@humanwhocodes/config-array-0.11.8" = {
+	      name = "_at_humanwhocodes_slash_config-array";
+	      packageName = "@humanwhocodes/config-array";
+	      version = "0.11.8";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz";
+		sha512 = "UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==";
+	      };
+	    };
+	    "@humanwhocodes/module-importer-1.0.1" = {
+	      name = "_at_humanwhocodes_slash_module-importer";
+	      packageName = "@humanwhocodes/module-importer";
+	      version = "1.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz";
+		sha512 = "bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==";
+	      };
+	    };
+	    "@humanwhocodes/object-schema-1.2.1" = {
+	      name = "_at_humanwhocodes_slash_object-schema";
+	      packageName = "@humanwhocodes/object-schema";
+	      version = "1.2.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz";
+		sha512 = "ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==";
+	      };
+	    };
+	    "@iarna/toml-2.2.5" = {
+	      name = "_at_iarna_slash_toml";
+	      packageName = "@iarna/toml";
+	      version = "2.2.5";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz";
+		sha512 = "trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==";
+	      };
+	    };
+	    "@nodelib/fs.scandir-2.1.5" = {
+	      name = "_at_nodelib_slash_fs.scandir";
+	      packageName = "@nodelib/fs.scandir";
+	      version = "2.1.5";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz";
+		sha512 = "vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==";
+	      };
+	    };
+	    "@nodelib/fs.stat-2.0.5" = {
+	      name = "_at_nodelib_slash_fs.stat";
+	      packageName = "@nodelib/fs.stat";
+	      version = "2.0.5";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz";
+		sha512 = "RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==";
+	      };
+	    };
+	    "@nodelib/fs.walk-1.2.8" = {
+	      name = "_at_nodelib_slash_fs.walk";
+	      packageName = "@nodelib/fs.walk";
+	      version = "1.2.8";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz";
+		sha512 = "oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==";
+	      };
+	    };
+	    "@sindresorhus/is-5.3.0" = {
+	      name = "_at_sindresorhus_slash_is";
+	      packageName = "@sindresorhus/is";
+	      version = "5.3.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz";
+		sha512 = "CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==";
+	      };
+	    };
+	    "@szmarczak/http-timer-5.0.1" = {
+	      name = "_at_szmarczak_slash_http-timer";
+	      packageName = "@szmarczak/http-timer";
+	      version = "5.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz";
+		sha512 = "+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==";
+	      };
+	    };
+	    "@types/http-cache-semantics-4.0.1" = {
+	      name = "_at_types_slash_http-cache-semantics";
+	      packageName = "@types/http-cache-semantics";
+	      version = "4.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz";
+		sha512 = "SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==";
+	      };
+	    };
+	    "@types/webappsec-credential-management-0.6.4" = {
+	      name = "_at_types_slash_webappsec-credential-management";
+	      packageName = "@types/webappsec-credential-management";
+	      version = "0.6.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/@types/webappsec-credential-management/-/webappsec-credential-management-0.6.4.tgz";
+		sha512 = "9ZLG4/avKS74jxhwjk6f8jUMfERFQKfBfdH+CL/1pxYsJtF8IM1lwwZhKZeV2eae6pNQGj8QcxJjsKBRno/Frg==";
+	      };
+	    };
+	    "acorn-8.8.2" = {
+	      name = "acorn";
+	      packageName = "acorn";
+	      version = "8.8.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz";
+		sha512 = "xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==";
+	      };
+	    };
+	    "acorn-jsx-5.3.2" = {
+	      name = "acorn-jsx";
+	      packageName = "acorn-jsx";
+	      version = "5.3.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz";
+		sha512 = "rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==";
+	      };
+	    };
+	    "aggregate-error-3.1.0" = {
+	      name = "aggregate-error";
+	      packageName = "aggregate-error";
+	      version = "3.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz";
+		sha512 = "4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==";
+	      };
+	    };
+	    "ajv-6.12.6" = {
+	      name = "ajv";
+	      packageName = "ajv";
+	      version = "6.12.6";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz";
+		sha512 = "j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==";
+	      };
+	    };
+	    "ansi-escapes-5.0.0" = {
+	      name = "ansi-escapes";
+	      packageName = "ansi-escapes";
+	      version = "5.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz";
+		sha512 = "5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==";
+	      };
+	    };
+	    "ansi-regex-5.0.1" = {
+	      name = "ansi-regex";
+	      packageName = "ansi-regex";
+	      version = "5.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz";
+		sha512 = "quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==";
+	      };
+	    };
+	    "ansi-regex-6.0.1" = {
+	      name = "ansi-regex";
+	      packageName = "ansi-regex";
+	      version = "6.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz";
+		sha512 = "n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==";
+	      };
+	    };
+	    "ansi-styles-4.3.0" = {
+	      name = "ansi-styles";
+	      packageName = "ansi-styles";
+	      version = "4.3.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz";
+		sha512 = "zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==";
+	      };
+	    };
+	    "ansi-styles-6.2.1" = {
+	      name = "ansi-styles";
+	      packageName = "ansi-styles";
+	      version = "6.2.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz";
+		sha512 = "bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==";
+	      };
+	    };
+	    "anymatch-3.1.3" = {
+	      name = "anymatch";
+	      packageName = "anymatch";
+	      version = "3.1.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz";
+		sha512 = "KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==";
+	      };
+	    };
+	    "argparse-2.0.1" = {
+	      name = "argparse";
+	      packageName = "argparse";
+	      version = "2.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz";
+		sha512 = "8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==";
+	      };
+	    };
+	    "array-union-2.1.0" = {
+	      name = "array-union";
+	      packageName = "array-union";
+	      version = "2.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz";
+		sha512 = "HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==";
+	      };
+	    };
+	    "as-table-1.0.55" = {
+	      name = "as-table";
+	      packageName = "as-table";
+	      version = "1.0.55";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz";
+		sha512 = "xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==";
+	      };
+	    };
+	    "balanced-match-1.0.2" = {
+	      name = "balanced-match";
+	      packageName = "balanced-match";
+	      version = "1.0.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz";
+		sha512 = "3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==";
+	      };
+	    };
+	    "base64-arraybuffer-0.2.0" = {
+	      name = "base64-arraybuffer";
+	      packageName = "base64-arraybuffer";
+	      version = "0.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz";
+		sha512 = "7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==";
+	      };
+	    };
+	    "base64-js-1.5.1" = {
+	      name = "base64-js";
+	      packageName = "base64-js";
+	      version = "1.5.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz";
+		sha512 = "AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==";
+	      };
+	    };
+	    "bignumber.js-9.1.1" = {
+	      name = "bignumber.js";
+	      packageName = "bignumber.js";
+	      version = "9.1.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz";
+		sha512 = "pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==";
+	      };
+	    };
+	    "binary-extensions-2.2.0" = {
+	      name = "binary-extensions";
+	      packageName = "binary-extensions";
+	      version = "2.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz";
+		sha512 = "jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==";
+	      };
+	    };
+	    "bl-1.2.3" = {
+	      name = "bl";
+	      packageName = "bl";
+	      version = "1.2.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz";
+		sha512 = "pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==";
+	      };
+	    };
+	    "bn.js-4.12.0" = {
+	      name = "bn.js";
+	      packageName = "bn.js";
+	      version = "4.12.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz";
+		sha512 = "c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==";
+	      };
+	    };
+	    "borc-2.1.2" = {
+	      name = "borc";
+	      packageName = "borc";
+	      version = "2.1.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/borc/-/borc-2.1.2.tgz";
+		sha512 = "Sy9eoUi4OiKzq7VovMn246iTo17kzuyHJKomCfpWMlI6RpfN1gk95w7d7gH264nApVLg0HZfcpz62/g4VH1Y4w==";
+	      };
+	    };
+	    "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==";
+	      };
+	    };
+	    "brace-expansion-2.0.1" = {
+	      name = "brace-expansion";
+	      packageName = "brace-expansion";
+	      version = "2.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz";
+		sha512 = "XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==";
+	      };
+	    };
+	    "braces-3.0.2" = {
+	      name = "braces";
+	      packageName = "braces";
+	      version = "3.0.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz";
+		sha512 = "b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==";
+	      };
+	    };
+	    "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";
+		sha512 = "cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==";
+	      };
+	    };
+	    "buffer-5.7.1" = {
+	      name = "buffer";
+	      packageName = "buffer";
+	      version = "5.7.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz";
+		sha512 = "EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==";
+	      };
+	    };
+	    "buffer-alloc-1.2.0" = {
+	      name = "buffer-alloc";
+	      packageName = "buffer-alloc";
+	      version = "1.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz";
+		sha512 = "CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==";
+	      };
+	    };
+	    "buffer-alloc-unsafe-1.1.0" = {
+	      name = "buffer-alloc-unsafe";
+	      packageName = "buffer-alloc-unsafe";
+	      version = "1.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz";
+		sha512 = "TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==";
+	      };
+	    };
+	    "buffer-crc32-0.2.13" = {
+	      name = "buffer-crc32";
+	      packageName = "buffer-crc32";
+	      version = "0.2.13";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz";
+		sha512 = "VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==";
+	      };
+	    };
+	    "buffer-fill-1.0.0" = {
+	      name = "buffer-fill";
+	      packageName = "buffer-fill";
+	      version = "1.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz";
+		sha512 = "T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==";
+	      };
+	    };
+	    "cacheable-lookup-7.0.0" = {
+	      name = "cacheable-lookup";
+	      packageName = "cacheable-lookup";
+	      version = "7.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz";
+		sha512 = "+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==";
+	      };
+	    };
+	    "cacheable-request-10.2.8" = {
+	      name = "cacheable-request";
+	      packageName = "cacheable-request";
+	      version = "10.2.8";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.8.tgz";
+		sha512 = "IDVO5MJ4LItE6HKFQTqT2ocAQsisOoCTUDu1ddCmnhyiwFQjXNPp4081Xj23N4tO+AFEFNzGuNEf/c8Gwwt15A==";
+	      };
+	    };
+	    "callsites-3.1.0" = {
+	      name = "callsites";
+	      packageName = "callsites";
+	      version = "3.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz";
+		sha512 = "P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==";
+	      };
+	    };
+	    "chalk-4.1.2" = {
+	      name = "chalk";
+	      packageName = "chalk";
+	      version = "4.1.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz";
+		sha512 = "oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==";
+	      };
+	    };
+	    "chokidar-3.5.3" = {
+	      name = "chokidar";
+	      packageName = "chokidar";
+	      version = "3.5.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz";
+		sha512 = "Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==";
+	      };
+	    };
+	    "clean-stack-2.2.0" = {
+	      name = "clean-stack";
+	      packageName = "clean-stack";
+	      version = "2.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz";
+		sha512 = "4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==";
+	      };
+	    };
+	    "cli-cursor-4.0.0" = {
+	      name = "cli-cursor";
+	      packageName = "cli-cursor";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz";
+		sha512 = "VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==";
+	      };
+	    };
+	    "color-convert-2.0.1" = {
+	      name = "color-convert";
+	      packageName = "color-convert";
+	      version = "2.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz";
+		sha512 = "RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==";
+	      };
+	    };
+	    "color-name-1.1.4" = {
+	      name = "color-name";
+	      packageName = "color-name";
+	      version = "1.1.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz";
+		sha512 = "dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==";
+	      };
+	    };
+	    "commander-2.20.3" = {
+	      name = "commander";
+	      packageName = "commander";
+	      version = "2.20.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz";
+		sha512 = "GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==";
+	      };
+	    };
+	    "commander-9.5.0" = {
+	      name = "commander";
+	      packageName = "commander";
+	      version = "9.5.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz";
+		sha512 = "KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==";
+	      };
+	    };
+	    "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";
+		sha512 = "/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==";
+	      };
+	    };
+	    "core-util-is-1.0.3" = {
+	      name = "core-util-is";
+	      packageName = "core-util-is";
+	      version = "1.0.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz";
+		sha512 = "ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==";
+	      };
+	    };
+	    "cross-spawn-7.0.3" = {
+	      name = "cross-spawn";
+	      packageName = "cross-spawn";
+	      version = "7.0.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz";
+		sha512 = "iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==";
+	      };
+	    };
+	    "data-uri-to-buffer-4.0.1" = {
+	      name = "data-uri-to-buffer";
+	      packageName = "data-uri-to-buffer";
+	      version = "4.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz";
+		sha512 = "0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==";
+	      };
+	    };
+	    "debounce-1.2.1" = {
+	      name = "debounce";
+	      packageName = "debounce";
+	      version = "1.2.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz";
+		sha512 = "XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==";
+	      };
+	    };
+	    "debug-4.3.4" = {
+	      name = "debug";
+	      packageName = "debug";
+	      version = "4.3.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz";
+		sha512 = "PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==";
+	      };
+	    };
+	    "decompress-4.2.1" = {
+	      name = "decompress";
+	      packageName = "decompress";
+	      version = "4.2.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz";
+		sha512 = "e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==";
+	      };
+	    };
+	    "decompress-response-6.0.0" = {
+	      name = "decompress-response";
+	      packageName = "decompress-response";
+	      version = "6.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz";
+		sha512 = "aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==";
+	      };
+	    };
+	    "decompress-tar-4.1.1" = {
+	      name = "decompress-tar";
+	      packageName = "decompress-tar";
+	      version = "4.1.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz";
+		sha512 = "JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==";
+	      };
+	    };
+	    "decompress-tarbz2-4.1.1" = {
+	      name = "decompress-tarbz2";
+	      packageName = "decompress-tarbz2";
+	      version = "4.1.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz";
+		sha512 = "s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==";
+	      };
+	    };
+	    "decompress-targz-4.1.1" = {
+	      name = "decompress-targz";
+	      packageName = "decompress-targz";
+	      version = "4.1.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz";
+		sha512 = "4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==";
+	      };
+	    };
+	    "decompress-unzip-4.0.1" = {
+	      name = "decompress-unzip";
+	      packageName = "decompress-unzip";
+	      version = "4.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz";
+		sha512 = "1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==";
+	      };
+	    };
+	    "deep-is-0.1.4" = {
+	      name = "deep-is";
+	      packageName = "deep-is";
+	      version = "0.1.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz";
+		sha512 = "oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==";
+	      };
+	    };
+	    "defer-to-connect-2.0.1" = {
+	      name = "defer-to-connect";
+	      packageName = "defer-to-connect";
+	      version = "2.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz";
+		sha512 = "4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==";
+	      };
+	    };
+	    "del-6.1.1" = {
+	      name = "del";
+	      packageName = "del";
+	      version = "6.1.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/del/-/del-6.1.1.tgz";
+		sha512 = "ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==";
+	      };
+	    };
+	    "delimit-stream-0.1.0" = {
+	      name = "delimit-stream";
+	      packageName = "delimit-stream";
+	      version = "0.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/delimit-stream/-/delimit-stream-0.1.0.tgz";
+		sha512 = "a02fiQ7poS5CnjiJBAsjGLPp5EwVoGHNeu9sziBd9huppRfsAFIpv5zNLv0V1gbop53ilngAf5Kf331AwcoRBQ==";
+	      };
+	    };
+	    "dhall-to-json-cli-1.7.6" = {
+	      name = "dhall-to-json-cli";
+	      packageName = "dhall-to-json-cli";
+	      version = "1.7.6";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/dhall-to-json-cli/-/dhall-to-json-cli-1.7.6.tgz";
+		sha512 = "cOZr8fWAfwMc0bFdjXG3M3sAesy2OeAmZ23e3mMsBFg/W+SFejACc9QmadvKnDrh857jVJj14xa9dTJogREU5A==";
+	      };
+	    };
+	    "dir-glob-3.0.1" = {
+	      name = "dir-glob";
+	      packageName = "dir-glob";
+	      version = "3.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz";
+		sha512 = "WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==";
+	      };
+	    };
+	    "doctrine-3.0.0" = {
+	      name = "doctrine";
+	      packageName = "doctrine";
+	      version = "3.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz";
+		sha512 = "yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==";
+	      };
+	    };
+	    "eastasianwidth-0.2.0" = {
+	      name = "eastasianwidth";
+	      packageName = "eastasianwidth";
+	      version = "0.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz";
+		sha512 = "I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==";
+	      };
+	    };
+	    "elliptic-6.5.4" = {
+	      name = "elliptic";
+	      packageName = "elliptic";
+	      version = "6.5.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz";
+		sha512 = "iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==";
+	      };
+	    };
+	    "emoji-regex-9.2.2" = {
+	      name = "emoji-regex";
+	      packageName = "emoji-regex";
+	      version = "9.2.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz";
+		sha512 = "L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==";
+	      };
+	    };
+	    "end-of-stream-1.4.4" = {
+	      name = "end-of-stream";
+	      packageName = "end-of-stream";
+	      version = "1.4.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz";
+		sha512 = "+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==";
+	      };
+	    };
+	    "escape-string-regexp-4.0.0" = {
+	      name = "escape-string-regexp";
+	      packageName = "escape-string-regexp";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz";
+		sha512 = "TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==";
+	      };
+	    };
+	    "eslint-8.36.0" = {
+	      name = "eslint";
+	      packageName = "eslint";
+	      version = "8.36.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz";
+		sha512 = "Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==";
+	      };
+	    };
+	    "eslint-scope-7.1.1" = {
+	      name = "eslint-scope";
+	      packageName = "eslint-scope";
+	      version = "7.1.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz";
+		sha512 = "QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==";
+	      };
+	    };
+	    "eslint-visitor-keys-3.3.0" = {
+	      name = "eslint-visitor-keys";
+	      packageName = "eslint-visitor-keys";
+	      version = "3.3.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz";
+		sha512 = "mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==";
+	      };
+	    };
+	    "espree-9.5.0" = {
+	      name = "espree";
+	      packageName = "espree";
+	      version = "9.5.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz";
+		sha512 = "JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==";
+	      };
+	    };
+	    "esquery-1.5.0" = {
+	      name = "esquery";
+	      packageName = "esquery";
+	      version = "1.5.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz";
+		sha512 = "YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==";
+	      };
+	    };
+	    "esrecurse-4.3.0" = {
+	      name = "esrecurse";
+	      packageName = "esrecurse";
+	      version = "4.3.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz";
+		sha512 = "KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==";
+	      };
+	    };
+	    "estraverse-5.3.0" = {
+	      name = "estraverse";
+	      packageName = "estraverse";
+	      version = "5.3.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz";
+		sha512 = "MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==";
+	      };
+	    };
+	    "esutils-2.0.3" = {
+	      name = "esutils";
+	      packageName = "esutils";
+	      version = "2.0.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz";
+		sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==";
+	      };
+	    };
+	    "execa-6.1.0" = {
+	      name = "execa";
+	      packageName = "execa";
+	      version = "6.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz";
+		sha512 = "QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==";
+	      };
+	    };
+	    "fast-deep-equal-3.1.3" = {
+	      name = "fast-deep-equal";
+	      packageName = "fast-deep-equal";
+	      version = "3.1.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";
+		sha512 = "f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==";
+	      };
+	    };
+	    "fast-glob-3.2.12" = {
+	      name = "fast-glob";
+	      packageName = "fast-glob";
+	      version = "3.2.12";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz";
+		sha512 = "DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==";
+	      };
+	    };
+	    "fast-json-stable-stringify-2.1.0" = {
+	      name = "fast-json-stable-stringify";
+	      packageName = "fast-json-stable-stringify";
+	      version = "2.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
+		sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==";
+	      };
+	    };
+	    "fast-levenshtein-2.0.6" = {
+	      name = "fast-levenshtein";
+	      packageName = "fast-levenshtein";
+	      version = "2.0.6";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
+		sha512 = "DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==";
+	      };
+	    };
+	    "fastq-1.15.0" = {
+	      name = "fastq";
+	      packageName = "fastq";
+	      version = "1.15.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz";
+		sha512 = "wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==";
+	      };
+	    };
+	    "fd-slicer-1.1.0" = {
+	      name = "fd-slicer";
+	      packageName = "fd-slicer";
+	      version = "1.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz";
+		sha512 = "cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==";
+	      };
+	    };
+	    "fetch-blob-3.2.0" = {
+	      name = "fetch-blob";
+	      packageName = "fetch-blob";
+	      version = "3.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz";
+		sha512 = "7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==";
+	      };
+	    };
+	    "file-entry-cache-6.0.1" = {
+	      name = "file-entry-cache";
+	      packageName = "file-entry-cache";
+	      version = "6.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz";
+		sha512 = "7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==";
+	      };
+	    };
+	    "file-type-3.9.0" = {
+	      name = "file-type";
+	      packageName = "file-type";
+	      version = "3.9.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz";
+		sha512 = "RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==";
+	      };
+	    };
+	    "file-type-5.2.0" = {
+	      name = "file-type";
+	      packageName = "file-type";
+	      version = "5.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz";
+		sha512 = "Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==";
+	      };
+	    };
+	    "file-type-6.2.0" = {
+	      name = "file-type";
+	      packageName = "file-type";
+	      version = "6.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz";
+		sha512 = "YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==";
+	      };
+	    };
+	    "fill-range-7.0.1" = {
+	      name = "fill-range";
+	      packageName = "fill-range";
+	      version = "7.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz";
+		sha512 = "qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==";
+	      };
+	    };
+	    "find-up-5.0.0" = {
+	      name = "find-up";
+	      packageName = "find-up";
+	      version = "5.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz";
+		sha512 = "78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==";
+	      };
+	    };
+	    "flat-cache-3.0.4" = {
+	      name = "flat-cache";
+	      packageName = "flat-cache";
+	      version = "3.0.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz";
+		sha512 = "dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==";
+	      };
+	    };
+	    "flatted-3.2.7" = {
+	      name = "flatted";
+	      packageName = "flatted";
+	      version = "3.2.7";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz";
+		sha512 = "5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==";
+	      };
+	    };
+	    "form-data-encoder-2.1.4" = {
+	      name = "form-data-encoder";
+	      packageName = "form-data-encoder";
+	      version = "2.1.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz";
+		sha512 = "yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==";
+	      };
+	    };
+	    "formdata-polyfill-4.0.10" = {
+	      name = "formdata-polyfill";
+	      packageName = "formdata-polyfill";
+	      version = "4.0.10";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz";
+		sha512 = "buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==";
+	      };
+	    };
+	    "fs-constants-1.0.0" = {
+	      name = "fs-constants";
+	      packageName = "fs-constants";
+	      version = "1.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz";
+		sha512 = "y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==";
+	      };
+	    };
+	    "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";
+		sha512 = "OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==";
+	      };
+	    };
+	    "fsevents-2.3.2" = {
+	      name = "fsevents";
+	      packageName = "fsevents";
+	      version = "2.3.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz";
+		sha512 = "xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==";
+	      };
+	    };
+	    "gar-1.0.4" = {
+	      name = "gar";
+	      packageName = "gar";
+	      version = "1.0.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/gar/-/gar-1.0.4.tgz";
+		sha512 = "w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==";
+	      };
+	    };
+	    "get-folder-size-4.0.0" = {
+	      name = "get-folder-size";
+	      packageName = "get-folder-size";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/get-folder-size/-/get-folder-size-4.0.0.tgz";
+		sha512 = "Z6sv92povPRhGTNv1j8pMOzkXCcJOYWFTSrulKzoF9qbIRHXtR2Vfjw964jsWVMrIKnwHzm/0jl8IFONbBbEKw==";
+	      };
+	    };
+	    "get-stream-2.3.1" = {
+	      name = "get-stream";
+	      packageName = "get-stream";
+	      version = "2.3.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz";
+		sha512 = "AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==";
+	      };
+	    };
+	    "get-stream-6.0.1" = {
+	      name = "get-stream";
+	      packageName = "get-stream";
+	      version = "6.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz";
+		sha512 = "ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==";
+	      };
+	    };
+	    "glob-7.2.3" = {
+	      name = "glob";
+	      packageName = "glob";
+	      version = "7.2.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz";
+		sha512 = "nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==";
+	      };
+	    };
+	    "glob-8.1.0" = {
+	      name = "glob";
+	      packageName = "glob";
+	      version = "8.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz";
+		sha512 = "r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==";
+	      };
+	    };
+	    "glob-parent-5.1.2" = {
+	      name = "glob-parent";
+	      packageName = "glob-parent";
+	      version = "5.1.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz";
+		sha512 = "AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==";
+	      };
+	    };
+	    "glob-parent-6.0.2" = {
+	      name = "glob-parent";
+	      packageName = "glob-parent";
+	      version = "6.0.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz";
+		sha512 = "XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==";
+	      };
+	    };
+	    "globals-13.20.0" = {
+	      name = "globals";
+	      packageName = "globals";
+	      version = "13.20.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz";
+		sha512 = "Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==";
+	      };
+	    };
+	    "globby-11.1.0" = {
+	      name = "globby";
+	      packageName = "globby";
+	      version = "11.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz";
+		sha512 = "jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==";
+	      };
+	    };
+	    "globby-13.1.3" = {
+	      name = "globby";
+	      packageName = "globby";
+	      version = "13.1.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz";
+		sha512 = "8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==";
+	      };
+	    };
+	    "got-12.6.0" = {
+	      name = "got";
+	      packageName = "got";
+	      version = "12.6.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/got/-/got-12.6.0.tgz";
+		sha512 = "WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==";
+	      };
+	    };
+	    "graceful-fs-4.2.10" = {
+	      name = "graceful-fs";
+	      packageName = "graceful-fs";
+	      version = "4.2.10";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz";
+		sha512 = "9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==";
+	      };
+	    };
+	    "grapheme-splitter-1.0.4" = {
+	      name = "grapheme-splitter";
+	      packageName = "grapheme-splitter";
+	      version = "1.0.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz";
+		sha512 = "bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==";
+	      };
+	    };
+	    "has-flag-4.0.0" = {
+	      name = "has-flag";
+	      packageName = "has-flag";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz";
+		sha512 = "EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==";
+	      };
+	    };
+	    "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==";
+	      };
+	    };
+	    "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";
+		sha512 = "Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==";
+	      };
+	    };
+	    "http-cache-semantics-4.1.1" = {
+	      name = "http-cache-semantics";
+	      packageName = "http-cache-semantics";
+	      version = "4.1.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz";
+		sha512 = "er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==";
+	      };
+	    };
+	    "http2-wrapper-2.2.0" = {
+	      name = "http2-wrapper";
+	      packageName = "http2-wrapper";
+	      version = "2.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz";
+		sha512 = "kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==";
+	      };
+	    };
+	    "human-signals-3.0.1" = {
+	      name = "human-signals";
+	      packageName = "human-signals";
+	      version = "3.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz";
+		sha512 = "rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==";
+	      };
+	    };
+	    "ieee754-1.2.1" = {
+	      name = "ieee754";
+	      packageName = "ieee754";
+	      version = "1.2.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz";
+		sha512 = "dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==";
+	      };
+	    };
+	    "ignore-5.2.4" = {
+	      name = "ignore";
+	      packageName = "ignore";
+	      version = "5.2.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz";
+		sha512 = "MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==";
+	      };
+	    };
+	    "import-fresh-3.3.0" = {
+	      name = "import-fresh";
+	      packageName = "import-fresh";
+	      version = "3.3.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz";
+		sha512 = "veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==";
+	      };
+	    };
+	    "imurmurhash-0.1.4" = {
+	      name = "imurmurhash";
+	      packageName = "imurmurhash";
+	      version = "0.1.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
+		sha512 = "JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==";
+	      };
+	    };
+	    "indent-string-4.0.0" = {
+	      name = "indent-string";
+	      packageName = "indent-string";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz";
+		sha512 = "EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==";
+	      };
+	    };
+	    "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";
+		sha512 = "k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==";
+	      };
+	    };
+	    "inherits-2.0.4" = {
+	      name = "inherits";
+	      packageName = "inherits";
+	      version = "2.0.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz";
+		sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==";
+	      };
+	    };
+	    "is-binary-path-2.1.0" = {
+	      name = "is-binary-path";
+	      packageName = "is-binary-path";
+	      version = "2.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz";
+		sha512 = "ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==";
+	      };
+	    };
+	    "is-extglob-2.1.1" = {
+	      name = "is-extglob";
+	      packageName = "is-extglob";
+	      version = "2.1.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";
+		sha512 = "SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==";
+	      };
+	    };
+	    "is-fullwidth-code-point-4.0.0" = {
+	      name = "is-fullwidth-code-point";
+	      packageName = "is-fullwidth-code-point";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz";
+		sha512 = "O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==";
+	      };
+	    };
+	    "is-glob-4.0.3" = {
+	      name = "is-glob";
+	      packageName = "is-glob";
+	      version = "4.0.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz";
+		sha512 = "xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==";
+	      };
+	    };
+	    "is-natural-number-4.0.1" = {
+	      name = "is-natural-number";
+	      packageName = "is-natural-number";
+	      version = "4.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz";
+		sha512 = "Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==";
+	      };
+	    };
+	    "is-number-7.0.0" = {
+	      name = "is-number";
+	      packageName = "is-number";
+	      version = "7.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz";
+		sha512 = "41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==";
+	      };
+	    };
+	    "is-path-cwd-2.2.0" = {
+	      name = "is-path-cwd";
+	      packageName = "is-path-cwd";
+	      version = "2.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz";
+		sha512 = "w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==";
+	      };
+	    };
+	    "is-path-inside-3.0.3" = {
+	      name = "is-path-inside";
+	      packageName = "is-path-inside";
+	      version = "3.0.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz";
+		sha512 = "Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==";
+	      };
+	    };
+	    "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";
+		sha512 = "uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==";
+	      };
+	    };
+	    "is-stream-3.0.0" = {
+	      name = "is-stream";
+	      packageName = "is-stream";
+	      version = "3.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz";
+		sha512 = "LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==";
+	      };
+	    };
+	    "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";
+		sha512 = "VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==";
+	      };
+	    };
+	    "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";
+		sha512 = "RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==";
+	      };
+	    };
+	    "iso-url-0.4.7" = {
+	      name = "iso-url";
+	      packageName = "iso-url";
+	      version = "0.4.7";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/iso-url/-/iso-url-0.4.7.tgz";
+		sha512 = "27fFRDnPAMnHGLq36bWTpKET+eiXct3ENlCcdcMdk+mjXrb2kw3mhBUg1B7ewAC0kVzlOPhADzQgz1SE6Tglog==";
+	      };
+	    };
+	    "js-sdsl-4.3.0" = {
+	      name = "js-sdsl";
+	      packageName = "js-sdsl";
+	      version = "4.3.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz";
+		sha512 = "mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==";
+	      };
+	    };
+	    "js-sha256-0.9.0" = {
+	      name = "js-sha256";
+	      packageName = "js-sha256";
+	      version = "0.9.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz";
+		sha512 = "sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==";
+	      };
+	    };
+	    "js-yaml-4.1.0" = {
+	      name = "js-yaml";
+	      packageName = "js-yaml";
+	      version = "4.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz";
+		sha512 = "wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==";
+	      };
+	    };
+	    "json-buffer-3.0.1" = {
+	      name = "json-buffer";
+	      packageName = "json-buffer";
+	      version = "3.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz";
+		sha512 = "4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==";
+	      };
+	    };
+	    "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-without-jsonify-1.0.1" = {
+	      name = "json-stable-stringify-without-jsonify";
+	      packageName = "json-stable-stringify-without-jsonify";
+	      version = "1.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz";
+		sha512 = "Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==";
+	      };
+	    };
+	    "json-text-sequence-0.1.1" = {
+	      name = "json-text-sequence";
+	      packageName = "json-text-sequence";
+	      version = "0.1.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.1.1.tgz";
+		sha512 = "L3mEegEWHRekSHjc7+sc8eJhba9Clq1PZ8kMkzf8OxElhXc8O4TS5MwcVlj9aEbm5dr81N90WHC5nAz3UO971w==";
+	      };
+	    };
+	    "keyv-4.5.2" = {
+	      name = "keyv";
+	      packageName = "keyv";
+	      version = "4.5.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz";
+		sha512 = "5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==";
+	      };
+	    };
+	    "kleur-3.0.3" = {
+	      name = "kleur";
+	      packageName = "kleur";
+	      version = "3.0.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz";
+		sha512 = "eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==";
+	      };
+	    };
+	    "levn-0.4.1" = {
+	      name = "levn";
+	      packageName = "levn";
+	      version = "0.4.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz";
+		sha512 = "+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==";
+	      };
+	    };
+	    "locate-path-6.0.0" = {
+	      name = "locate-path";
+	      packageName = "locate-path";
+	      version = "6.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz";
+		sha512 = "iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==";
+	      };
+	    };
+	    "lodash.merge-4.6.2" = {
+	      name = "lodash.merge";
+	      packageName = "lodash.merge";
+	      version = "4.6.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz";
+		sha512 = "0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==";
+	      };
+	    };
+	    "log-update-5.0.1" = {
+	      name = "log-update";
+	      packageName = "log-update";
+	      version = "5.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz";
+		sha512 = "5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==";
+	      };
+	    };
+	    "lowercase-keys-3.0.0" = {
+	      name = "lowercase-keys";
+	      packageName = "lowercase-keys";
+	      version = "3.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz";
+		sha512 = "ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==";
+	      };
+	    };
+	    "make-dir-1.3.0" = {
+	      name = "make-dir";
+	      packageName = "make-dir";
+	      version = "1.3.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz";
+		sha512 = "2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==";
+	      };
+	    };
+	    "merge-stream-2.0.0" = {
+	      name = "merge-stream";
+	      packageName = "merge-stream";
+	      version = "2.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz";
+		sha512 = "abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==";
+	      };
+	    };
+	    "merge2-1.4.1" = {
+	      name = "merge2";
+	      packageName = "merge2";
+	      version = "1.4.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz";
+		sha512 = "8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==";
+	      };
+	    };
+	    "micromatch-4.0.5" = {
+	      name = "micromatch";
+	      packageName = "micromatch";
+	      version = "4.0.5";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz";
+		sha512 = "DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==";
+	      };
+	    };
+	    "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==";
+	      };
+	    };
+	    "mimic-fn-4.0.0" = {
+	      name = "mimic-fn";
+	      packageName = "mimic-fn";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz";
+		sha512 = "vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==";
+	      };
+	    };
+	    "mimic-response-3.1.0" = {
+	      name = "mimic-response";
+	      packageName = "mimic-response";
+	      version = "3.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz";
+		sha512 = "z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==";
+	      };
+	    };
+	    "mimic-response-4.0.0" = {
+	      name = "mimic-response";
+	      packageName = "mimic-response";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz";
+		sha512 = "e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==";
+	      };
+	    };
+	    "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";
+		sha512 = "JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==";
+	      };
+	    };
+	    "minimatch-3.1.2" = {
+	      name = "minimatch";
+	      packageName = "minimatch";
+	      version = "3.1.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz";
+		sha512 = "J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==";
+	      };
+	    };
+	    "minimatch-5.1.6" = {
+	      name = "minimatch";
+	      packageName = "minimatch";
+	      version = "5.1.6";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz";
+		sha512 = "lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==";
+	      };
+	    };
+	    "ms-2.1.2" = {
+	      name = "ms";
+	      packageName = "ms";
+	      version = "2.1.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";
+		sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==";
+	      };
+	    };
+	    "natural-compare-1.4.0" = {
+	      name = "natural-compare";
+	      packageName = "natural-compare";
+	      version = "1.4.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz";
+		sha512 = "OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==";
+	      };
+	    };
+	    "ncp-2.0.0" = {
+	      name = "ncp";
+	      packageName = "ncp";
+	      version = "2.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz";
+		sha512 = "zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==";
+	      };
+	    };
+	    "node-addon-api-2.0.2" = {
+	      name = "node-addon-api";
+	      packageName = "node-addon-api";
+	      version = "2.0.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz";
+		sha512 = "Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==";
+	      };
+	    };
+	    "node-domexception-1.0.0" = {
+	      name = "node-domexception";
+	      packageName = "node-domexception";
+	      version = "1.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz";
+		sha512 = "/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==";
+	      };
+	    };
+	    "node-fetch-3.3.1" = {
+	      name = "node-fetch";
+	      packageName = "node-fetch";
+	      version = "3.3.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz";
+		sha512 = "cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==";
+	      };
+	    };
+	    "node-gyp-build-4.6.0" = {
+	      name = "node-gyp-build";
+	      packageName = "node-gyp-build";
+	      version = "4.6.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz";
+		sha512 = "NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==";
+	      };
+	    };
+	    "normalize-path-3.0.0" = {
+	      name = "normalize-path";
+	      packageName = "normalize-path";
+	      version = "3.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz";
+		sha512 = "6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==";
+	      };
+	    };
+	    "normalize-url-8.0.0" = {
+	      name = "normalize-url";
+	      packageName = "normalize-url";
+	      version = "8.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz";
+		sha512 = "uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==";
+	      };
+	    };
+	    "npm-run-path-5.1.0" = {
+	      name = "npm-run-path";
+	      packageName = "npm-run-path";
+	      version = "5.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz";
+		sha512 = "sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==";
+	      };
+	    };
+	    "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";
+		sha512 = "rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==";
+	      };
+	    };
+	    "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";
+		sha512 = "lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==";
+	      };
+	    };
+	    "onetime-5.1.2" = {
+	      name = "onetime";
+	      packageName = "onetime";
+	      version = "5.1.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz";
+		sha512 = "kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==";
+	      };
+	    };
+	    "onetime-6.0.0" = {
+	      name = "onetime";
+	      packageName = "onetime";
+	      version = "6.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz";
+		sha512 = "1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==";
+	      };
+	    };
+	    "optionator-0.9.1" = {
+	      name = "optionator";
+	      packageName = "optionator";
+	      version = "0.9.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz";
+		sha512 = "74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==";
+	      };
+	    };
+	    "p-cancelable-3.0.0" = {
+	      name = "p-cancelable";
+	      packageName = "p-cancelable";
+	      version = "3.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz";
+		sha512 = "mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==";
+	      };
+	    };
+	    "p-limit-3.1.0" = {
+	      name = "p-limit";
+	      packageName = "p-limit";
+	      version = "3.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz";
+		sha512 = "TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==";
+	      };
+	    };
+	    "p-locate-5.0.0" = {
+	      name = "p-locate";
+	      packageName = "p-locate";
+	      version = "5.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz";
+		sha512 = "LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==";
+	      };
+	    };
+	    "p-map-4.0.0" = {
+	      name = "p-map";
+	      packageName = "p-map";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz";
+		sha512 = "/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==";
+	      };
+	    };
+	    "parent-module-1.0.1" = {
+	      name = "parent-module";
+	      packageName = "parent-module";
+	      version = "1.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz";
+		sha512 = "GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==";
+	      };
+	    };
+	    "path-exists-4.0.0" = {
+	      name = "path-exists";
+	      packageName = "path-exists";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz";
+		sha512 = "ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==";
+	      };
+	    };
+	    "path-is-absolute-1.0.1" = {
+	      name = "path-is-absolute";
+	      packageName = "path-is-absolute";
+	      version = "1.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+		sha512 = "AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==";
+	      };
+	    };
+	    "path-key-3.1.1" = {
+	      name = "path-key";
+	      packageName = "path-key";
+	      version = "3.1.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz";
+		sha512 = "ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==";
+	      };
+	    };
+	    "path-key-4.0.0" = {
+	      name = "path-key";
+	      packageName = "path-key";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz";
+		sha512 = "haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==";
+	      };
+	    };
+	    "path-type-4.0.0" = {
+	      name = "path-type";
+	      packageName = "path-type";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz";
+		sha512 = "gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==";
+	      };
+	    };
+	    "pem-file-1.0.1" = {
+	      name = "pem-file";
+	      packageName = "pem-file";
+	      version = "1.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/pem-file/-/pem-file-1.0.1.tgz";
+		sha512 = "jIDhaSc4Pk8go+kDYJJ2aS7Bg8Lxvir02NnGp9B1bdJpKiDH680ULl+Duh0jBkz8gV3PywEAWz9XNYqLcd6kVg==";
+	      };
+	    };
+	    "pend-1.2.0" = {
+	      name = "pend";
+	      packageName = "pend";
+	      version = "1.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz";
+		sha512 = "F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==";
+	      };
+	    };
+	    "picomatch-2.3.1" = {
+	      name = "picomatch";
+	      packageName = "picomatch";
+	      version = "2.3.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz";
+		sha512 = "JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==";
+	      };
+	    };
+	    "pify-2.3.0" = {
+	      name = "pify";
+	      packageName = "pify";
+	      version = "2.3.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz";
+		sha512 = "udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==";
+	      };
+	    };
+	    "pify-3.0.0" = {
+	      name = "pify";
+	      packageName = "pify";
+	      version = "3.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz";
+		sha512 = "C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==";
+	      };
+	    };
+	    "pinkie-2.0.4" = {
+	      name = "pinkie";
+	      packageName = "pinkie";
+	      version = "2.0.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz";
+		sha512 = "MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==";
+	      };
+	    };
+	    "pinkie-promise-2.0.1" = {
+	      name = "pinkie-promise";
+	      packageName = "pinkie-promise";
+	      version = "2.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
+		sha512 = "0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==";
+	      };
+	    };
+	    "prelude-ls-1.2.1" = {
+	      name = "prelude-ls";
+	      packageName = "prelude-ls";
+	      version = "1.2.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz";
+		sha512 = "vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==";
+	      };
+	    };
+	    "printable-characters-1.0.42" = {
+	      name = "printable-characters";
+	      packageName = "printable-characters";
+	      version = "1.0.42";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz";
+		sha512 = "dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==";
+	      };
+	    };
+	    "process-nextick-args-2.0.1" = {
+	      name = "process-nextick-args";
+	      packageName = "process-nextick-args";
+	      version = "2.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+		sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==";
+	      };
+	    };
+	    "prompts-2.4.2" = {
+	      name = "prompts";
+	      packageName = "prompts";
+	      version = "2.4.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz";
+		sha512 = "NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==";
+	      };
+	    };
+	    "punycode-2.3.0" = {
+	      name = "punycode";
+	      packageName = "punycode";
+	      version = "2.3.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz";
+		sha512 = "rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==";
+	      };
+	    };
+	    "queue-microtask-1.2.3" = {
+	      name = "queue-microtask";
+	      packageName = "queue-microtask";
+	      version = "1.2.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz";
+		sha512 = "NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==";
+	      };
+	    };
+	    "quick-lru-5.1.1" = {
+	      name = "quick-lru";
+	      packageName = "quick-lru";
+	      version = "5.1.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz";
+		sha512 = "WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==";
+	      };
+	    };
+	    "readable-stream-2.3.8" = {
+	      name = "readable-stream";
+	      packageName = "readable-stream";
+	      version = "2.3.8";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz";
+		sha512 = "8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==";
+	      };
+	    };
+	    "readable-stream-3.6.2" = {
+	      name = "readable-stream";
+	      packageName = "readable-stream";
+	      version = "3.6.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz";
+		sha512 = "9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==";
+	      };
+	    };
+	    "readdirp-3.6.0" = {
+	      name = "readdirp";
+	      packageName = "readdirp";
+	      version = "3.6.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz";
+		sha512 = "hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==";
+	      };
+	    };
+	    "resolve-alpn-1.2.1" = {
+	      name = "resolve-alpn";
+	      packageName = "resolve-alpn";
+	      version = "1.2.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz";
+		sha512 = "0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==";
+	      };
+	    };
+	    "resolve-from-4.0.0" = {
+	      name = "resolve-from";
+	      packageName = "resolve-from";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz";
+		sha512 = "pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==";
+	      };
+	    };
+	    "responselike-3.0.0" = {
+	      name = "responselike";
+	      packageName = "responselike";
+	      version = "3.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz";
+		sha512 = "40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==";
+	      };
+	    };
+	    "restore-cursor-4.0.0" = {
+	      name = "restore-cursor";
+	      packageName = "restore-cursor";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz";
+		sha512 = "I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==";
+	      };
+	    };
+	    "reusify-1.0.4" = {
+	      name = "reusify";
+	      packageName = "reusify";
+	      version = "1.0.4";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz";
+		sha512 = "U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==";
+	      };
+	    };
+	    "rimraf-3.0.2" = {
+	      name = "rimraf";
+	      packageName = "rimraf";
+	      version = "3.0.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz";
+		sha512 = "JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==";
+	      };
+	    };
+	    "run-parallel-1.2.0" = {
+	      name = "run-parallel";
+	      packageName = "run-parallel";
+	      version = "1.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz";
+		sha512 = "5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==";
+	      };
+	    };
+	    "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==";
+	      };
+	    };
+	    "safe-buffer-5.2.1" = {
+	      name = "safe-buffer";
+	      packageName = "safe-buffer";
+	      version = "5.2.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz";
+		sha512 = "rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==";
+	      };
+	    };
+	    "secp256k1-4.0.3" = {
+	      name = "secp256k1";
+	      packageName = "secp256k1";
+	      version = "4.0.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz";
+		sha512 = "NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==";
+	      };
+	    };
+	    "seek-bzip-1.0.6" = {
+	      name = "seek-bzip";
+	      packageName = "seek-bzip";
+	      version = "1.0.6";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz";
+		sha512 = "e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==";
+	      };
+	    };
+	    "shebang-command-2.0.0" = {
+	      name = "shebang-command";
+	      packageName = "shebang-command";
+	      version = "2.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz";
+		sha512 = "kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==";
+	      };
+	    };
+	    "shebang-regex-3.0.0" = {
+	      name = "shebang-regex";
+	      packageName = "shebang-regex";
+	      version = "3.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz";
+		sha512 = "7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==";
+	      };
+	    };
+	    "signal-exit-3.0.7" = {
+	      name = "signal-exit";
+	      packageName = "signal-exit";
+	      version = "3.0.7";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz";
+		sha512 = "wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==";
+	      };
+	    };
+	    "simple-cbor-0.4.1" = {
+	      name = "simple-cbor";
+	      packageName = "simple-cbor";
+	      version = "0.4.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/simple-cbor/-/simple-cbor-0.4.1.tgz";
+		sha512 = "rijcxtwx2b4Bje3sqeIqw5EeW7UlOIC4YfOdwqIKacpvRQ/D78bWg/4/0m5e0U91oKvlGh7LlJuZCu07ISCC7w==";
+	      };
+	    };
+	    "sisteransi-1.0.5" = {
+	      name = "sisteransi";
+	      packageName = "sisteransi";
+	      version = "1.0.5";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz";
+		sha512 = "bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==";
+	      };
+	    };
+	    "slash-3.0.0" = {
+	      name = "slash";
+	      packageName = "slash";
+	      version = "3.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz";
+		sha512 = "g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==";
+	      };
+	    };
+	    "slash-4.0.0" = {
+	      name = "slash";
+	      packageName = "slash";
+	      version = "4.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz";
+		sha512 = "3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==";
+	      };
+	    };
+	    "slice-ansi-5.0.0" = {
+	      name = "slice-ansi";
+	      packageName = "slice-ansi";
+	      version = "5.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz";
+		sha512 = "FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==";
+	      };
+	    };
+	    "string-width-5.1.2" = {
+	      name = "string-width";
+	      packageName = "string-width";
+	      version = "5.1.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz";
+		sha512 = "HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==";
+	      };
+	    };
+	    "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.3.0" = {
+	      name = "string_decoder";
+	      packageName = "string_decoder";
+	      version = "1.3.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz";
+		sha512 = "hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==";
+	      };
+	    };
+	    "strip-ansi-6.0.1" = {
+	      name = "strip-ansi";
+	      packageName = "strip-ansi";
+	      version = "6.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz";
+		sha512 = "Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==";
+	      };
+	    };
+	    "strip-ansi-7.0.1" = {
+	      name = "strip-ansi";
+	      packageName = "strip-ansi";
+	      version = "7.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz";
+		sha512 = "cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==";
+	      };
+	    };
+	    "strip-dirs-2.1.0" = {
+	      name = "strip-dirs";
+	      packageName = "strip-dirs";
+	      version = "2.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz";
+		sha512 = "JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==";
+	      };
+	    };
+	    "strip-final-newline-3.0.0" = {
+	      name = "strip-final-newline";
+	      packageName = "strip-final-newline";
+	      version = "3.0.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz";
+		sha512 = "dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==";
+	      };
+	    };
+	    "strip-json-comments-3.1.1" = {
+	      name = "strip-json-comments";
+	      packageName = "strip-json-comments";
+	      version = "3.1.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz";
+		sha512 = "6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==";
+	      };
+	    };
+	    "supports-color-7.2.0" = {
+	      name = "supports-color";
+	      packageName = "supports-color";
+	      version = "7.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz";
+		sha512 = "qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==";
+	      };
+	    };
+	    "tar-stream-1.6.2" = {
+	      name = "tar-stream";
+	      packageName = "tar-stream";
+	      version = "1.6.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz";
+		sha512 = "rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==";
+	      };
+	    };
+	    "text-table-0.2.0" = {
+	      name = "text-table";
+	      packageName = "text-table";
+	      version = "0.2.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz";
+		sha512 = "N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==";
+	      };
+	    };
+	    "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";
+		sha512 = "w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==";
+	      };
+	    };
+	    "to-buffer-1.1.1" = {
+	      name = "to-buffer";
+	      packageName = "to-buffer";
+	      version = "1.1.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz";
+		sha512 = "lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==";
+	      };
+	    };
+	    "to-regex-range-5.0.1" = {
+	      name = "to-regex-range";
+	      packageName = "to-regex-range";
+	      version = "5.0.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz";
+		sha512 = "65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==";
+	      };
+	    };
+	    "tweetnacl-1.0.3" = {
+	      name = "tweetnacl";
+	      packageName = "tweetnacl";
+	      version = "1.0.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz";
+		sha512 = "6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==";
+	      };
+	    };
+	    "type-check-0.4.0" = {
+	      name = "type-check";
+	      packageName = "type-check";
+	      version = "0.4.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz";
+		sha512 = "XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==";
+	      };
+	    };
+	    "type-fest-0.20.2" = {
+	      name = "type-fest";
+	      packageName = "type-fest";
+	      version = "0.20.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz";
+		sha512 = "Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==";
+	      };
+	    };
+	    "type-fest-1.4.0" = {
+	      name = "type-fest";
+	      packageName = "type-fest";
+	      version = "1.4.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz";
+		sha512 = "yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==";
+	      };
+	    };
+	    "unbzip2-stream-1.4.3" = {
+	      name = "unbzip2-stream";
+	      packageName = "unbzip2-stream";
+	      version = "1.4.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz";
+		sha512 = "mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==";
+	      };
+	    };
+	    "uri-js-4.4.1" = {
+	      name = "uri-js";
+	      packageName = "uri-js";
+	      version = "4.4.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz";
+		sha512 = "7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==";
+	      };
+	    };
+	    "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";
+		sha512 = "EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==";
+	      };
+	    };
+	    "web-streams-polyfill-3.2.1" = {
+	      name = "web-streams-polyfill";
+	      packageName = "web-streams-polyfill";
+	      version = "3.2.1";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz";
+		sha512 = "e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==";
+	      };
+	    };
+	    "which-2.0.2" = {
+	      name = "which";
+	      packageName = "which";
+	      version = "2.0.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/which/-/which-2.0.2.tgz";
+		sha512 = "BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==";
+	      };
+	    };
+	    "word-wrap-1.2.3" = {
+	      name = "word-wrap";
+	      packageName = "word-wrap";
+	      version = "1.2.3";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz";
+		sha512 = "Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==";
+	      };
+	    };
+	    "wrap-ansi-8.1.0" = {
+	      name = "wrap-ansi";
+	      packageName = "wrap-ansi";
+	      version = "8.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz";
+		sha512 = "si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==";
+	      };
+	    };
+	    "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";
+		sha512 = "l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==";
+	      };
+	    };
+	    "xtend-4.0.2" = {
+	      name = "xtend";
+	      packageName = "xtend";
+	      version = "4.0.2";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz";
+		sha512 = "LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==";
+	      };
+	    };
+	    "yauzl-2.10.0" = {
+	      name = "yauzl";
+	      packageName = "yauzl";
+	      version = "2.10.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz";
+		sha512 = "p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==";
+	      };
+	    };
+	    "yocto-queue-0.1.0" = {
+	      name = "yocto-queue";
+	      packageName = "yocto-queue";
+	      version = "0.1.0";
+	      src = fetchurl {
+		url = "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz";
+		sha512 = "rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==";
+	      };
+	    };
+	  };
+	in nodeEnv.buildNodePackage {
+	  name = "ic-mops";
+	  packageName = "ic-mops";
+	  version = "0.8.7";
+	  src = fetchurl {
+	    url = "https://registry.npmjs.org/ic-mops/-/ic-mops-0.8.7.tgz";
+	    sha512 = "SFs6ju8o4Q58xH/zxi805hnyZbn/t/JfIfge2kOEjsjfZTd4Kfo+2pfFBHIzkw5+rZjMWyknSzM6TJmWm3m5Hg==";
+	  };
+	  dependencies = [
+	    sources."@dfinity/agent-0.11.3"
+	    sources."@dfinity/candid-0.11.3"
+	    sources."@dfinity/identity-0.11.3"
+	    sources."@dfinity/principal-0.11.3"
+	    sources."@eslint-community/eslint-utils-4.2.0"
+	    sources."@eslint-community/regexpp-4.4.0"
+	    (sources."@eslint/eslintrc-2.0.1" // {
+	      dependencies = [
+		sources."minimatch-3.1.2"
+	      ];
+	    })
+	    sources."@eslint/js-8.36.0"
+	    (sources."@humanwhocodes/config-array-0.11.8" // {
+	      dependencies = [
+		sources."minimatch-3.1.2"
+	      ];
+	    })
+	    sources."@humanwhocodes/module-importer-1.0.1"
+	    sources."@humanwhocodes/object-schema-1.2.1"
+	    sources."@iarna/toml-2.2.5"
+	    sources."@nodelib/fs.scandir-2.1.5"
+	    sources."@nodelib/fs.stat-2.0.5"
+	    sources."@nodelib/fs.walk-1.2.8"
+	    sources."@sindresorhus/is-5.3.0"
+	    sources."@szmarczak/http-timer-5.0.1"
+	    sources."@types/http-cache-semantics-4.0.1"
+	    sources."@types/webappsec-credential-management-0.6.4"
+	    sources."acorn-8.8.2"
+	    sources."acorn-jsx-5.3.2"
+	    sources."aggregate-error-3.1.0"
+	    sources."ajv-6.12.6"
+	    (sources."ansi-escapes-5.0.0" // {
+	      dependencies = [
+		sources."type-fest-1.4.0"
+	      ];
+	    })
+	    sources."ansi-regex-5.0.1"
+	    sources."ansi-styles-4.3.0"
+	    sources."anymatch-3.1.3"
+	    sources."argparse-2.0.1"
+	    sources."array-union-2.1.0"
+	    sources."as-table-1.0.55"
+	    sources."balanced-match-1.0.2"
+	    sources."base64-arraybuffer-0.2.0"
+	    sources."base64-js-1.5.1"
+	    sources."bignumber.js-9.1.1"
+	    sources."binary-extensions-2.2.0"
+	    (sources."bl-1.2.3" // {
+	      dependencies = [
+		(sources."readable-stream-2.3.8" // {
+		  dependencies = [
+		    sources."safe-buffer-5.1.2"
+		  ];
+		})
+		(sources."string_decoder-1.1.1" // {
+		  dependencies = [
+		    sources."safe-buffer-5.1.2"
+		  ];
+		})
+	      ];
+	    })
+	    sources."bn.js-4.12.0"
+	    (sources."borc-2.1.2" // {
+	      dependencies = [
+		sources."commander-2.20.3"
+	      ];
+	    })
+	    sources."brace-expansion-1.1.11"
+	    sources."braces-3.0.2"
+	    sources."brorand-1.1.0"
+	    sources."buffer-5.7.1"
+	    sources."buffer-alloc-1.2.0"
+	    sources."buffer-alloc-unsafe-1.1.0"
+	    sources."buffer-crc32-0.2.13"
+	    sources."buffer-fill-1.0.0"
+	    sources."cacheable-lookup-7.0.0"
+	    (sources."cacheable-request-10.2.8" // {
+	      dependencies = [
+		sources."get-stream-6.0.1"
+	      ];
+	    })
+	    sources."callsites-3.1.0"
+	    sources."chalk-4.1.2"
+	    sources."chokidar-3.5.3"
+	    sources."clean-stack-2.2.0"
+	    sources."cli-cursor-4.0.0"
+	    sources."color-convert-2.0.1"
+	    sources."color-name-1.1.4"
+	    sources."commander-9.5.0"
+	    sources."concat-map-0.0.1"
+	    sources."core-util-is-1.0.3"
+	    sources."cross-spawn-7.0.3"
+	    sources."data-uri-to-buffer-4.0.1"
+	    sources."debounce-1.2.1"
+	    sources."debug-4.3.4"
+	    sources."decompress-4.2.1"
+	    (sources."decompress-response-6.0.0" // {
+	      dependencies = [
+		sources."mimic-response-3.1.0"
+	      ];
+	    })
+	    sources."decompress-tar-4.1.1"
+	    (sources."decompress-tarbz2-4.1.1" // {
+	      dependencies = [
+		sources."file-type-6.2.0"
+	      ];
+	    })
+	    sources."decompress-targz-4.1.1"
+	    (sources."decompress-unzip-4.0.1" // {
+	      dependencies = [
+		sources."file-type-3.9.0"
+	      ];
+	    })
+	    sources."deep-is-0.1.4"
+	    sources."defer-to-connect-2.0.1"
+	    (sources."del-6.1.1" // {
+	      dependencies = [
+		sources."globby-11.1.0"
+	      ];
+	    })
+	    sources."delimit-stream-0.1.0"
+	    sources."dhall-to-json-cli-1.7.6"
+	    sources."dir-glob-3.0.1"
+	    sources."doctrine-3.0.0"
+	    sources."eastasianwidth-0.2.0"
+	    sources."elliptic-6.5.4"
+	    sources."emoji-regex-9.2.2"
+	    sources."end-of-stream-1.4.4"
+	    sources."escape-string-regexp-4.0.0"
+	    (sources."eslint-8.36.0" // {
+	      dependencies = [
+		sources."glob-parent-6.0.2"
+		sources."minimatch-3.1.2"
+	      ];
+	    })
+	    sources."eslint-scope-7.1.1"
+	    sources."eslint-visitor-keys-3.3.0"
+	    sources."espree-9.5.0"
+	    sources."esquery-1.5.0"
+	    sources."esrecurse-4.3.0"
+	    sources."estraverse-5.3.0"
+	    sources."esutils-2.0.3"
+	    (sources."execa-6.1.0" // {
+	      dependencies = [
+		sources."get-stream-6.0.1"
+		sources."is-stream-3.0.0"
+	      ];
+	    })
+	    sources."fast-deep-equal-3.1.3"
+	    sources."fast-glob-3.2.12"
+	    sources."fast-json-stable-stringify-2.1.0"
+	    sources."fast-levenshtein-2.0.6"
+	    sources."fastq-1.15.0"
+	    sources."fd-slicer-1.1.0"
+	    sources."fetch-blob-3.2.0"
+	    sources."file-entry-cache-6.0.1"
+	    sources."file-type-5.2.0"
+	    sources."fill-range-7.0.1"
+	    sources."find-up-5.0.0"
+	    sources."flat-cache-3.0.4"
+	    sources."flatted-3.2.7"
+	    sources."form-data-encoder-2.1.4"
+	    sources."formdata-polyfill-4.0.10"
+	    sources."fs-constants-1.0.0"
+	    sources."fs.realpath-1.0.0"
+	    sources."fsevents-2.3.2"
+	    sources."gar-1.0.4"
+	    sources."get-folder-size-4.0.0"
+	    sources."get-stream-2.3.1"
+	    sources."glob-8.1.0"
+	    sources."glob-parent-5.1.2"
+	    sources."globals-13.20.0"
+	    (sources."globby-13.1.3" // {
+	      dependencies = [
+		sources."slash-4.0.0"
+	      ];
+	    })
+	    (sources."got-12.6.0" // {
+	      dependencies = [
+		sources."get-stream-6.0.1"
+	      ];
+	    })
+	    sources."graceful-fs-4.2.10"
+	    sources."grapheme-splitter-1.0.4"
+	    sources."has-flag-4.0.0"
+	    sources."hash.js-1.1.7"
+	    sources."hmac-drbg-1.0.1"
+	    sources."http-cache-semantics-4.1.1"
+	    sources."http2-wrapper-2.2.0"
+	    sources."human-signals-3.0.1"
+	    sources."ieee754-1.2.1"
+	    sources."ignore-5.2.4"
+	    sources."import-fresh-3.3.0"
+	    sources."imurmurhash-0.1.4"
+	    sources."indent-string-4.0.0"
+	    sources."inflight-1.0.6"
+	    sources."inherits-2.0.4"
+	    sources."is-binary-path-2.1.0"
+	    sources."is-extglob-2.1.1"
+	    sources."is-fullwidth-code-point-4.0.0"
+	    sources."is-glob-4.0.3"
+	    sources."is-natural-number-4.0.1"
+	    sources."is-number-7.0.0"
+	    sources."is-path-cwd-2.2.0"
+	    sources."is-path-inside-3.0.3"
+	    sources."is-stream-1.1.0"
+	    sources."isarray-1.0.0"
+	    sources."isexe-2.0.0"
+	    sources."iso-url-0.4.7"
+	    sources."js-sdsl-4.3.0"
+	    sources."js-sha256-0.9.0"
+	    sources."js-yaml-4.1.0"
+	    sources."json-buffer-3.0.1"
+	    sources."json-schema-traverse-0.4.1"
+	    sources."json-stable-stringify-without-jsonify-1.0.1"
+	    sources."json-text-sequence-0.1.1"
+	    sources."keyv-4.5.2"
+	    sources."kleur-3.0.3"
+	    sources."levn-0.4.1"
+	    sources."locate-path-6.0.0"
+	    sources."lodash.merge-4.6.2"
+	    (sources."log-update-5.0.1" // {
+	      dependencies = [
+		sources."ansi-regex-6.0.1"
+		sources."strip-ansi-7.0.1"
+	      ];
+	    })
+	    sources."lowercase-keys-3.0.0"
+	    (sources."make-dir-1.3.0" // {
+	      dependencies = [
+		sources."pify-3.0.0"
+	      ];
+	    })
+	    sources."merge-stream-2.0.0"
+	    sources."merge2-1.4.1"
+	    sources."micromatch-4.0.5"
+	    sources."mimic-fn-4.0.0"
+	    sources."mimic-response-4.0.0"
+	    sources."minimalistic-assert-1.0.1"
+	    sources."minimalistic-crypto-utils-1.0.1"
+	    (sources."minimatch-5.1.6" // {
+	      dependencies = [
+		sources."brace-expansion-2.0.1"
+	      ];
+	    })
+	    sources."ms-2.1.2"
+	    sources."natural-compare-1.4.0"
+	    sources."ncp-2.0.0"
+	    sources."node-addon-api-2.0.2"
+	    sources."node-domexception-1.0.0"
+	    sources."node-fetch-3.3.1"
+	    sources."node-gyp-build-4.6.0"
+	    sources."normalize-path-3.0.0"
+	    sources."normalize-url-8.0.0"
+	    (sources."npm-run-path-5.1.0" // {
+	      dependencies = [
+		sources."path-key-4.0.0"
+	      ];
+	    })
+	    sources."object-assign-4.1.1"
+	    sources."once-1.4.0"
+	    sources."onetime-6.0.0"
+	    sources."optionator-0.9.1"
+	    sources."p-cancelable-3.0.0"
+	    sources."p-limit-3.1.0"
+	    sources."p-locate-5.0.0"
+	    sources."p-map-4.0.0"
+	    sources."parent-module-1.0.1"
+	    sources."path-exists-4.0.0"
+	    sources."path-is-absolute-1.0.1"
+	    sources."path-key-3.1.1"
+	    sources."path-type-4.0.0"
+	    sources."pem-file-1.0.1"
+	    sources."pend-1.2.0"
+	    sources."picomatch-2.3.1"
+	    sources."pify-2.3.0"
+	    sources."pinkie-2.0.4"
+	    sources."pinkie-promise-2.0.1"
+	    sources."prelude-ls-1.2.1"
+	    sources."printable-characters-1.0.42"
+	    sources."process-nextick-args-2.0.1"
+	    sources."prompts-2.4.2"
+	    sources."punycode-2.3.0"
+	    sources."queue-microtask-1.2.3"
+	    sources."quick-lru-5.1.1"
+	    sources."readable-stream-3.6.2"
+	    sources."readdirp-3.6.0"
+	    sources."resolve-alpn-1.2.1"
+	    sources."resolve-from-4.0.0"
+	    sources."responselike-3.0.0"
+	    (sources."restore-cursor-4.0.0" // {
+	      dependencies = [
+		sources."mimic-fn-2.1.0"
+		sources."onetime-5.1.2"
+	      ];
+	    })
+	    sources."reusify-1.0.4"
+	    (sources."rimraf-3.0.2" // {
+	      dependencies = [
+		sources."glob-7.2.3"
+		sources."minimatch-3.1.2"
+	      ];
+	    })
+	    sources."run-parallel-1.2.0"
+	    sources."safe-buffer-5.2.1"
+	    sources."secp256k1-4.0.3"
+	    (sources."seek-bzip-1.0.6" // {
+	      dependencies = [
+		sources."commander-2.20.3"
+	      ];
+	    })
+	    sources."shebang-command-2.0.0"
+	    sources."shebang-regex-3.0.0"
+	    sources."signal-exit-3.0.7"
+	    sources."simple-cbor-0.4.1"
+	    sources."sisteransi-1.0.5"
+	    sources."slash-3.0.0"
+	    (sources."slice-ansi-5.0.0" // {
+	      dependencies = [
+		sources."ansi-styles-6.2.1"
+	      ];
+	    })
+	    (sources."string-width-5.1.2" // {
+	      dependencies = [
+		sources."ansi-regex-6.0.1"
+		sources."strip-ansi-7.0.1"
+	      ];
+	    })
+	    sources."string_decoder-1.3.0"
+	    sources."strip-ansi-6.0.1"
+	    sources."strip-dirs-2.1.0"
+	    sources."strip-final-newline-3.0.0"
+	    sources."strip-json-comments-3.1.1"
+	    sources."supports-color-7.2.0"
+	    (sources."tar-stream-1.6.2" // {
+	      dependencies = [
+		sources."readable-stream-2.3.8"
+		sources."safe-buffer-5.1.2"
+		sources."string_decoder-1.1.1"
+	      ];
+	    })
+	    sources."text-table-0.2.0"
+	    sources."through-2.3.8"
+	    sources."to-buffer-1.1.1"
+	    sources."to-regex-range-5.0.1"
+	    sources."tweetnacl-1.0.3"
+	    sources."type-check-0.4.0"
+	    sources."type-fest-0.20.2"
+	    sources."unbzip2-stream-1.4.3"
+	    sources."uri-js-4.4.1"
+	    sources."util-deprecate-1.0.2"
+	    sources."web-streams-polyfill-3.2.1"
+	    sources."which-2.0.2"
+	    sources."word-wrap-1.2.3"
+	    (sources."wrap-ansi-8.1.0" // {
+	      dependencies = [
+		sources."ansi-regex-6.0.1"
+		sources."ansi-styles-6.2.1"
+		sources."strip-ansi-7.0.1"
+	      ];
+	    })
+	    sources."wrappy-1.0.2"
+	    sources."xtend-4.0.2"
+	    sources."yauzl-2.10.0"
+	    sources."yocto-queue-0.1.0"
+	  ];
+	  buildInputs = [];
+	  meta = {
+	    description = "Mops is a package manager for the Motoko programming language.";
+	    homepage = "https://mops.one";
+	    license = "MIT";
+	  };
+	  dontPatchELF = true;
+	  production = true;
+	  bypassCache = true;
+	  reconstructLock = true;
+	})
+	wasmtime
+      ];
       DFX_CACHE_ROOT = "${drv}/share/dfx";
     } // modify (dfxPaths drv dfxBins));
   warn = mkShell ({

Pitometsu avatar May 24 '23 13:05 Pitometsu

For wasmtime you could use my suggestion in this thread.

For mops it is a bit more complicated, but I suggest you put nodejs specific nix files separately, like what nomeata did in your given link.

ninegua avatar May 24 '23 13:05 ninegua

Thank you for the suggestion. Keeping it open in case you consider to add mops to the shell yet.

Pitometsu avatar May 24 '23 14:05 Pitometsu