diff --git a/flake.lock b/flake.lock index 6fa85c08e..83c762394 100644 --- a/flake.lock +++ b/flake.lock @@ -154,11 +154,11 @@ "cryptonite": { "flake": false, "locked": { - "lastModified": 1624444174, - "narHash": "sha256-sDMA4ej1NIModAt7PQvcgIknI3KwfzcAp9YQUSe4CWw=", + "lastModified": 1704764911, + "narHash": "sha256-VuEWT2Bd4aSJyRcXpB+lsGDqxrTHB/uRvILzYWLNfxk=", "ref": "uni2work", - "rev": "71a630edaf5f22c464e24fac8d9d310f4055ea1f", - "revCount": 1202, + "rev": "f78fca2504bb767d632a3bac8dbbc23367eff0e9", + "revCount": 1220, "type": "git", "url": "https://gitlab.uniworx.de/haskell/cryptonite.git" }, @@ -295,11 +295,11 @@ "hackage": { "flake": false, "locked": { - "lastModified": 1704587119, - "narHash": "sha256-TRFglZ7pCUUA/8nOuBSgl00/ZRCHEyjlChM7BKtOW7o=", + "lastModified": 1704846187, + "narHash": "sha256-eCxEI6PXPsxHSTgnnpEg2fxVbGxIn4ZFYX1M394Tcwc=", "owner": "input-output-hk", "repo": "hackage.nix", - "rev": "ecd98fbd5469a20b4676d12a16cf0ddfb985839b", + "rev": "5889a4e063c158261aaad4ad0720ddc4ee6a4a20", "type": "github" }, "original": { @@ -344,11 +344,11 @@ "stackage": "stackage" }, "locked": { - "lastModified": 1704588627, - "narHash": "sha256-r2PBVhwymJcsILZ7bjPu5s7gZei4TWB3oQ18j/XEU3Q=", + "lastModified": 1704847818, + "narHash": "sha256-LQzIY21CkCirSSR+7fB5uQjlFGBzCvjA0x/TuPXT3V8=", "owner": "input-output-hk", "repo": "haskell.nix", - "rev": "a7c10d298ecb807ec403f717cb4b095af01f8137", + "rev": "28fceff2ef63b5bd0717371df5500a58ace98ee6", "type": "github" }, "original": { @@ -820,11 +820,11 @@ "stackage": { "flake": false, "locked": { - "lastModified": 1704586233, - "narHash": "sha256-fPoR/v1FWkc8KwXkTHp0uCV4sKy4WWgzLGnvEviOl7Y=", + "lastModified": 1704845382, + "narHash": "sha256-nzbV0Z9KIEjglN/I1qNIRvi80y8EqebxLI7hn8EvJMI=", "owner": "input-output-hk", "repo": "stackage.nix", - "rev": "5858fedb06d93d88a20c68ca882b6dcb9e72a65d", + "rev": "518634e42dfbecf2bae7f3af3eb6fa8fe4fcdca2", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index eef3875da..d40531c5d 100644 --- a/flake.nix +++ b/flake.nix @@ -126,7 +126,7 @@ }; }) - # (import ./nix/maildev) + (import ./nix/maildev) haskell-nix.overlay (import ./nix/uniworx { inherit inputs frontendSource backendSource; gitRevision = if self ? rev then self.rev else null; }) (import ./nix/docker { inherit self; }) diff --git a/nix/maildev/node-env.nix b/nix/maildev/node-env.nix index 59f0ec5f8..bc1e36628 100644 --- a/nix/maildev/node-env.nix +++ b/nix/maildev/node-env.nix @@ -1,10 +1,6 @@ -# SPDX-FileCopyrightText: 2022 Gregor Kleen -# -# SPDX-License-Identifier: AGPL-3.0-or-later - # This file originates from node2nix -{lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile}: +{lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile, writeShellScript}: let # Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master @@ -44,36 +40,22 @@ let ''; }; - includeDependencies = {dependencies}: - lib.optionalString (dependencies != []) - (lib.concatMapStrings (dependency: - '' - # Bundle the dependencies of the package - mkdir -p node_modules - cd node_modules + # Common shell logic + installPackage = writeShellScript "install-package" '' + installPackage() { + local packageName=$1 src=$2 - # Only include dependencies if they don't exist. They may also be bundled in the package. - if [ ! -e "${dependency.name}" ] - then - ${composePackage dependency} - fi + local strippedName - cd .. - '' - ) dependencies); - - # Recursively composes the dependencies of a package - composePackage = { name, packageName, src, dependencies ? [], ... }@args: - builtins.addErrorContext "while evaluating node package '${packageName}'" '' - DIR=$(pwd) + local DIR=$PWD cd $TMPDIR - unpackFile ${src} + unpackFile $src # Make the base dir in which the target dependency resides first - mkdir -p "$(dirname "$DIR/${packageName}")" + mkdir -p "$(dirname "$DIR/$packageName")" - if [ -f "${src}" ] + if [ -f "$src" ] then # Figure out what directory has been unpacked packageDir="$(find . -maxdepth 1 -type d | tail -1)" @@ -83,28 +65,53 @@ let chmod -R u+w "$packageDir" # Move the extracted tarball into the output folder - mv "$packageDir" "$DIR/${packageName}" - elif [ -d "${src}" ] + 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})" + 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}" + mv "$strippedName" "$DIR/$packageName" fi - # Unset the stripped name to not confuse the next unpack step - unset strippedName + # Change to the package directory to install dependencies + cd "$DIR/$packageName" + } + ''; - # Include the dependencies of the package - 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 .."} @@ -158,7 +165,11 @@ let 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)); @@ -250,8 +261,8 @@ let 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); + process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n"); + process.exit(1); } if(packageLock.dependencies !== undefined) { @@ -263,7 +274,7 @@ let # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes reconstructPackageLock = writeTextFile { - name = "addintegrityfields.js"; + name = "reconstructpackagelock.js"; text = '' var fs = require('fs'); var path = require('path'); @@ -273,25 +284,43 @@ let var lockObj = { name: packageObj.name, version: packageObj.version, - lockfileVersion: 1, + 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, 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"), dependencies[packageObj.name].dependencies); + processDependencies(path.join(filePath, "node_modules"), packages, dependencies[packageObj.name].dependencies); } } - function processDependencies(dir, dependencies) { + function processDependencies(dir, packages, dependencies) { if(fs.existsSync(dir)) { var files = fs.readdirSync(dir); @@ -307,23 +336,84 @@ let pkgFiles.forEach(function(entry) { if(stats.isDirectory()) { var pkgFilePath = path.join(filePath, entry); - augmentPackageJSON(pkgFilePath, dependencies); + augmentPackageJSON(pkgFilePath, packages, dependencies); } }); } else { - augmentPackageJSON(filePath, dependencies); + augmentPackageJSON(filePath, packages, dependencies); } } }); } } - processDependencies("node_modules", lockObj.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"; @@ -370,20 +460,25 @@ let 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} ${npmFlags} ${lib.optionalString production "--production"} install + 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 + , version ? null , dependencies ? [] , buildInputs ? [] , production ? true @@ -395,13 +490,14 @@ let , dontStrip ? true , unpackPhase ? "true" , buildPhase ? "true" + , meta ? {} , ... }@args: let - extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" ]; + extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" "meta" ]; in stdenv.mkDerivation ({ - name = "node_${name}-${version}"; + name = "${name}${if version == null then "" else "-${version}"}"; buildInputs = [ tarWrapper python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux ++ lib.optional (stdenv.isDarwin) libtool @@ -418,6 +514,8 @@ let 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 @@ -431,6 +529,17 @@ let if [ -d "$out/lib/node_modules/.bin" ] then ln -s $out/lib/node_modules/.bin $out/bin + + # Fixup all executables + ls $out/bin/* | while read i + do + file="$(readlink -f "$i")" + chmod u+rwx "$file" + if isScript "$file" + then + sed -i 's/\r$//' "$file" # convert crlf to lf + fi + done fi # Create symlinks to the deployed manual page folders, if applicable @@ -450,13 +559,18 @@ let # 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 + , version ? null , src , dependencies ? [] , buildInputs ? [] @@ -474,7 +588,7 @@ let extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ]; in stdenv.mkDerivation ({ - name = "node-dependencies-${name}-${version}"; + name = "node-dependencies-${name}${if version == null then "" else "-${version}"}"; buildInputs = [ tarWrapper python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux @@ -490,6 +604,8 @@ let passAsFile = [ "includeScript" "pinpointDependenciesScript" ]; installPhase = '' + source ${installPackage} + mkdir -p $out/${packageName} cd $out/${packageName} @@ -502,6 +618,7 @@ let if [ -f ${src}/package-lock.json ] then cp ${src}/package-lock.json . + chmod 644 package-lock.json fi ''} @@ -524,7 +641,7 @@ let buildNodeShell = { name , packageName - , version + , version ? null , src , dependencies ? [] , buildInputs ? [] @@ -540,9 +657,10 @@ let let nodeDependencies = buildNodeDependencies args; + extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "unpackPhase" "buildPhase" ]; in - stdenv.mkDerivation { - name = "node-shell-${name}-${version}"; + stdenv.mkDerivation ({ + name = "node-shell-${name}${if version == null then "" else "-${version}"}"; buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs; buildCommand = '' @@ -561,7 +679,7 @@ let export NODE_PATH=${nodeDependencies}/lib/node_modules export PATH="${nodeDependencies}/bin:$PATH" ''; - }; + } // extraArgs); in { buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist; diff --git a/nix/maildev/node-packages.nix b/nix/maildev/node-packages.nix index 3711453bc..5a0981bd0 100644 --- a/nix/maildev/node-packages.nix +++ b/nix/maildev/node-packages.nix @@ -1,1198 +1,40 @@ -# SPDX-FileCopyrightText: 2022 Gregor Kleen -# -# SPDX-License-Identifier: AGPL-3.0-or-later - -# This file has been generated by node2nix 1.9.0. Do not edit! +# This file has been generated by node2nix 1.11.1. Do not edit! {nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}: let - sources = { - "accepts-1.3.7" = { - name = "accepts"; - packageName = "accepts"; - version = "1.3.7"; - src = fetchurl { - url = "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz"; - sha512 = "Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA=="; - }; - }; - "addressparser-1.0.1" = { - name = "addressparser"; - packageName = "addressparser"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz"; - sha1 = "47afbe1a2a9262191db6838e4fd1d39b40821746"; - }; - }; - "after-0.8.2" = { - name = "after"; - packageName = "after"; - version = "0.8.2"; - src = fetchurl { - url = "https://registry.npmjs.org/after/-/after-0.8.2.tgz"; - sha1 = "fedb394f9f0e02aa9768e702bda23b505fae7e1f"; - }; - }; - "array-flatten-1.1.1" = { - name = "array-flatten"; - packageName = "array-flatten"; - version = "1.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"; - sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2"; - }; - }; - "arraybuffer.slice-0.0.7" = { - name = "arraybuffer.slice"; - packageName = "arraybuffer.slice"; - version = "0.0.7"; - src = fetchurl { - url = "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz"; - sha512 = "wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="; - }; - }; - "async-3.2.0" = { - name = "async"; - packageName = "async"; - version = "3.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/async/-/async-3.2.0.tgz"; - sha512 = "TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw=="; - }; - }; - "async-limiter-1.0.1" = { - name = "async-limiter"; - packageName = "async-limiter"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz"; - sha512 = "csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="; - }; - }; - "backo2-1.0.2" = { - name = "backo2"; - packageName = "backo2"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz"; - sha1 = "31ab1ac8b129363463e35b3ebb69f4dfcfba7947"; - }; - }; - "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=="; - }; - }; - "base32.js-0.1.0" = { - name = "base32.js"; - packageName = "base32.js"; - version = "0.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz"; - sha1 = "b582dec693c2f11e893cf064ee6ac5b6131a2202"; - }; - }; - "base64-arraybuffer-0.1.5" = { - name = "base64-arraybuffer"; - packageName = "base64-arraybuffer"; - version = "0.1.5"; - src = fetchurl { - url = "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz"; - sha1 = "73926771923b5a19747ad666aa5cd4bf9c6e9ce8"; - }; - }; - "base64id-1.0.0" = { - name = "base64id"; - packageName = "base64id"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz"; - sha1 = "47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"; - }; - }; - "better-assert-1.0.2" = { - name = "better-assert"; - packageName = "better-assert"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz"; - sha1 = "40866b9e1b9e0b55b481894311e68faffaebc522"; - }; - }; - "blob-0.0.5" = { - name = "blob"; - packageName = "blob"; - version = "0.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz"; - sha512 = "gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="; - }; - }; - "body-parser-1.19.0" = { - name = "body-parser"; - packageName = "body-parser"; - version = "1.19.0"; - src = fetchurl { - url = "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz"; - sha512 = "dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw=="; - }; - }; - "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=="; - }; - }; - "bytes-3.1.0" = { - name = "bytes"; - packageName = "bytes"; - version = "3.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz"; - sha512 = "zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="; - }; - }; - "callsite-1.0.0" = { - name = "callsite"; - packageName = "callsite"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz"; - sha1 = "280398e5d664bd74038b6f0905153e6e8af1bc20"; - }; - }; - "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=="; - }; - }; - "component-bind-1.0.0" = { - name = "component-bind"; - packageName = "component-bind"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz"; - sha1 = "00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"; - }; - }; - "component-emitter-1.2.1" = { - name = "component-emitter"; - packageName = "component-emitter"; - version = "1.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz"; - sha1 = "137918d6d78283f7df7a6b7c5a63e140e69425e6"; - }; - }; - "component-emitter-1.3.0" = { - name = "component-emitter"; - packageName = "component-emitter"; - version = "1.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz"; - sha512 = "Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="; - }; - }; - "component-inherit-0.0.3" = { - name = "component-inherit"; - packageName = "component-inherit"; - version = "0.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz"; - sha1 = "645fc4adf58b72b649d5cae65135619db26ff143"; - }; - }; - "concat-map-0.0.1" = { - name = "concat-map"; - packageName = "concat-map"; - version = "0.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"; - sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b"; - }; - }; - "content-disposition-0.5.3" = { - name = "content-disposition"; - packageName = "content-disposition"; - version = "0.5.3"; - src = fetchurl { - url = "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz"; - sha512 = "ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g=="; - }; - }; - "content-type-1.0.4" = { - name = "content-type"; - packageName = "content-type"; - version = "1.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz"; - sha512 = "hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="; - }; - }; - "cookie-0.3.1" = { - name = "cookie"; - packageName = "cookie"; - version = "0.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz"; - sha1 = "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"; - }; - }; - "cookie-0.4.0" = { - name = "cookie"; - packageName = "cookie"; - version = "0.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz"; - sha512 = "+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="; - }; - }; - "cookie-signature-1.0.6" = { - name = "cookie-signature"; - packageName = "cookie-signature"; - version = "1.0.6"; - src = fetchurl { - url = "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"; - sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c"; - }; - }; - "cors-2.8.5" = { - name = "cors"; - packageName = "cors"; - version = "2.8.5"; - src = fetchurl { - url = "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz"; - sha512 = "KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="; - }; - }; - "debug-2.6.9" = { - name = "debug"; - packageName = "debug"; - version = "2.6.9"; - src = fetchurl { - url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"; - sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="; - }; - }; - "debug-3.1.0" = { - name = "debug"; - packageName = "debug"; - version = "3.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz"; - sha512 = "OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g=="; - }; - }; - "debug-4.1.1" = { - name = "debug"; - packageName = "debug"; - version = "4.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz"; - sha512 = "pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw=="; - }; - }; - "depd-1.1.2" = { - name = "depd"; - packageName = "depd"; - version = "1.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"; - sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9"; - }; - }; - "destroy-1.0.4" = { - name = "destroy"; - packageName = "destroy"; - version = "1.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"; - sha1 = "978857442c44749e4206613e37946205826abd80"; - }; - }; - "ee-first-1.1.1" = { - name = "ee-first"; - packageName = "ee-first"; - version = "1.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"; - sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d"; - }; - }; - "encodeurl-1.0.2" = { - name = "encodeurl"; - packageName = "encodeurl"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"; - sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"; - }; - }; - "engine.io-3.3.2" = { - name = "engine.io"; - packageName = "engine.io"; - version = "3.3.2"; - src = fetchurl { - url = "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz"; - sha512 = "AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w=="; - }; - }; - "engine.io-client-3.3.2" = { - name = "engine.io-client"; - packageName = "engine.io-client"; - version = "3.3.2"; - src = fetchurl { - url = "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz"; - sha512 = "y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ=="; - }; - }; - "engine.io-parser-2.1.3" = { - name = "engine.io-parser"; - packageName = "engine.io-parser"; - version = "2.1.3"; - src = fetchurl { - url = "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz"; - sha512 = "6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA=="; - }; - }; - "escape-html-1.0.3" = { - name = "escape-html"; - packageName = "escape-html"; - version = "1.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"; - sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988"; - }; - }; - "escape-string-regexp-1.0.5" = { - name = "escape-string-regexp"; - packageName = "escape-string-regexp"; - version = "1.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; - sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"; - }; - }; - "etag-1.8.1" = { - name = "etag"; - packageName = "etag"; - version = "1.8.1"; - src = fetchurl { - url = "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz"; - sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887"; - }; - }; - "express-4.17.1" = { - name = "express"; - packageName = "express"; - version = "4.17.1"; - src = fetchurl { - url = "https://registry.npmjs.org/express/-/express-4.17.1.tgz"; - sha512 = "mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g=="; - }; - }; - "extend-3.0.2" = { - name = "extend"; - packageName = "extend"; - version = "3.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz"; - sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="; - }; - }; - "finalhandler-1.1.2" = { - name = "finalhandler"; - packageName = "finalhandler"; - version = "1.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz"; - sha512 = "aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA=="; - }; - }; - "forwarded-0.1.2" = { - name = "forwarded"; - packageName = "forwarded"; - version = "0.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz"; - sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84"; - }; - }; - "fresh-0.5.2" = { - name = "fresh"; - packageName = "fresh"; - version = "0.5.2"; - src = fetchurl { - url = "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"; - sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7"; - }; - }; - "fs.realpath-1.0.0" = { - name = "fs.realpath"; - packageName = "fs.realpath"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"; - sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; - }; - }; - "glob-7.1.7" = { - name = "glob"; - packageName = "glob"; - version = "7.1.7"; - src = fetchurl { - url = "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz"; - sha512 = "OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ=="; - }; - }; - "has-binary2-1.0.3" = { - name = "has-binary2"; - packageName = "has-binary2"; - version = "1.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz"; - sha512 = "G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw=="; - }; - }; - "has-cors-1.1.0" = { - name = "has-cors"; - packageName = "has-cors"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz"; - sha1 = "5e474793f7ea9843d1bb99c23eef49ff126fff39"; - }; - }; - "http-errors-1.7.2" = { - name = "http-errors"; - packageName = "http-errors"; - version = "1.7.2"; - src = fetchurl { - url = "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz"; - sha512 = "uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg=="; - }; - }; - "iconv-lite-0.4.24" = { - name = "iconv-lite"; - packageName = "iconv-lite"; - version = "0.4.24"; - src = fetchurl { - url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"; - sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="; - }; - }; - "indexof-0.0.1" = { - name = "indexof"; - packageName = "indexof"; - version = "0.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz"; - sha1 = "82dc336d232b9062179d05ab3293a66059fd435d"; - }; - }; - "inflight-1.0.6" = { - name = "inflight"; - packageName = "inflight"; - version = "1.0.6"; - src = fetchurl { - url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"; - sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9"; - }; - }; - "inherits-2.0.3" = { - name = "inherits"; - packageName = "inherits"; - version = "2.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"; - sha1 = "633c2c83e3da42a502f52466022480f4208261de"; - }; - }; - "ipaddr.js-1.9.1" = { - name = "ipaddr.js"; - packageName = "ipaddr.js"; - version = "1.9.1"; - src = fetchurl { - url = "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"; - sha512 = "0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="; - }; - }; - "ipv6-normalize-1.0.1" = { - name = "ipv6-normalize"; - packageName = "ipv6-normalize"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/ipv6-normalize/-/ipv6-normalize-1.0.1.tgz"; - sha1 = "1b3258290d365fa83239e89907dde4592e7620a8"; - }; - }; - "is-wsl-1.1.0" = { - name = "is-wsl"; - packageName = "is-wsl"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz"; - sha1 = "1f16e4aa22b04d1336b66188a66af3c600c3a66d"; - }; - }; - "isarray-2.0.1" = { - name = "isarray"; - packageName = "isarray"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz"; - sha1 = "a37d94ed9cda2d59865c9f76fe596ee1f338741e"; - }; - }; - "mailparser-mit-1.0.0" = { - name = "mailparser-mit"; - packageName = "mailparser-mit"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/mailparser-mit/-/mailparser-mit-1.0.0.tgz"; - sha512 = "sckRITNb3VCT1sQ275g47MAN786pQ5lU20bLY5f794dF/ARGzuVATQ64gO13FOw8jayjFT10e5ttsripKGGXcw=="; - }; - }; - "media-typer-0.3.0" = { - name = "media-typer"; - packageName = "media-typer"; - version = "0.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"; - sha1 = "8710d7af0aa626f8fffa1ce00168545263255748"; - }; - }; - "merge-descriptors-1.0.1" = { - name = "merge-descriptors"; - packageName = "merge-descriptors"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz"; - sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61"; - }; - }; - "methods-1.1.2" = { - name = "methods"; - packageName = "methods"; - version = "1.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"; - sha1 = "5529a4d67654134edcc5266656835b0f851afcee"; - }; - }; - "mime-1.6.0" = { - name = "mime"; - packageName = "mime"; - version = "1.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"; - sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="; - }; - }; - "mime-db-1.47.0" = { - name = "mime-db"; - packageName = "mime-db"; - version = "1.47.0"; - src = fetchurl { - url = "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz"; - sha512 = "QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw=="; - }; - }; - "mime-types-2.1.30" = { - name = "mime-types"; - packageName = "mime-types"; - version = "2.1.30"; - src = fetchurl { - url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz"; - sha512 = "crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg=="; - }; - }; - "minimatch-3.0.4" = { - name = "minimatch"; - packageName = "minimatch"; - version = "3.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz"; - sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="; - }; - }; - "ms-2.0.0" = { - name = "ms"; - packageName = "ms"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"; - sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8"; - }; - }; - "ms-2.1.1" = { - name = "ms"; - packageName = "ms"; - version = "2.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz"; - sha512 = "tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="; - }; - }; - "ms-2.1.3" = { - name = "ms"; - packageName = "ms"; - version = "2.1.3"; - src = fetchurl { - url = "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"; - sha512 = "6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="; - }; - }; - "negotiator-0.6.2" = { - name = "negotiator"; - packageName = "negotiator"; - version = "0.6.2"; - src = fetchurl { - url = "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz"; - sha512 = "hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="; - }; - }; - "nodemailer-3.1.8" = { - name = "nodemailer"; - packageName = "nodemailer"; - version = "3.1.8"; - src = fetchurl { - url = "https://registry.npmjs.org/nodemailer/-/nodemailer-3.1.8.tgz"; - sha1 = "febfaccb4bd273678473a309c6cb4b4a2f3c48e3"; - }; - }; - "nodemailer-5.0.0" = { - name = "nodemailer"; - packageName = "nodemailer"; - version = "5.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/nodemailer/-/nodemailer-5.0.0.tgz"; - sha512 = "XI4PI5L7GYcJyHkPcHlvPyRrYohNYBNRNbt1tU8PXNU3E1ADJC84a13V0vbL9AM431OP+ETacaGXAF8fGn1JvA=="; - }; - }; - "object-assign-4.1.1" = { - name = "object-assign"; - packageName = "object-assign"; - version = "4.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"; - sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863"; - }; - }; - "object-component-0.0.3" = { - name = "object-component"; - packageName = "object-component"; - version = "0.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz"; - sha1 = "f0c69aa50efc95b866c186f400a33769cb2f1291"; - }; - }; - "on-finished-2.3.0" = { - name = "on-finished"; - packageName = "on-finished"; - version = "2.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"; - sha1 = "20f1336481b083cd75337992a16971aa2d906947"; - }; - }; - "once-1.4.0" = { - name = "once"; - packageName = "once"; - version = "1.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz"; - sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1"; - }; - }; - "opn-6.0.0" = { - name = "opn"; - packageName = "opn"; - version = "6.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz"; - sha512 = "I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ=="; - }; - }; - "parseqs-0.0.5" = { - name = "parseqs"; - packageName = "parseqs"; - version = "0.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz"; - sha1 = "d5208a3738e46766e291ba2ea173684921a8b89d"; - }; - }; - "parseuri-0.0.5" = { - name = "parseuri"; - packageName = "parseuri"; - version = "0.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz"; - sha1 = "80204a50d4dbb779bfdc6ebe2778d90e4bce320a"; - }; - }; - "parseurl-1.3.3" = { - name = "parseurl"; - packageName = "parseurl"; - version = "1.3.3"; - src = fetchurl { - url = "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"; - sha512 = "CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="; - }; - }; - "path-is-absolute-1.0.1" = { - name = "path-is-absolute"; - packageName = "path-is-absolute"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"; - sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"; - }; - }; - "path-to-regexp-0.1.7" = { - name = "path-to-regexp"; - packageName = "path-to-regexp"; - version = "0.1.7"; - src = fetchurl { - url = "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz"; - sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c"; - }; - }; - "proxy-addr-2.0.6" = { - name = "proxy-addr"; - packageName = "proxy-addr"; - version = "2.0.6"; - src = fetchurl { - url = "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz"; - sha512 = "dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw=="; - }; - }; - "qs-6.7.0" = { - name = "qs"; - packageName = "qs"; - version = "6.7.0"; - src = fetchurl { - url = "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz"; - sha512 = "VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="; - }; - }; - "range-parser-1.2.1" = { - name = "range-parser"; - packageName = "range-parser"; - version = "1.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"; - sha512 = "Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="; - }; - }; - "raw-body-2.4.0" = { - name = "raw-body"; - packageName = "raw-body"; - version = "2.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz"; - sha512 = "4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q=="; - }; - }; - "rimraf-2.7.1" = { - name = "rimraf"; - packageName = "rimraf"; - version = "2.7.1"; - src = fetchurl { - url = "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz"; - sha512 = "uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w=="; - }; - }; - "safe-buffer-5.1.2" = { - name = "safe-buffer"; - packageName = "safe-buffer"; - version = "5.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"; - sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="; - }; - }; - "safer-buffer-2.1.2" = { - name = "safer-buffer"; - packageName = "safer-buffer"; - version = "2.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"; - sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="; - }; - }; - "send-0.17.1" = { - name = "send"; - packageName = "send"; - version = "0.17.1"; - src = fetchurl { - url = "https://registry.npmjs.org/send/-/send-0.17.1.tgz"; - sha512 = "BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg=="; - }; - }; - "serve-static-1.14.1" = { - name = "serve-static"; - packageName = "serve-static"; - version = "1.14.1"; - src = fetchurl { - url = "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz"; - sha512 = "JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg=="; - }; - }; - "setprototypeof-1.1.1" = { - name = "setprototypeof"; - packageName = "setprototypeof"; - version = "1.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz"; - sha512 = "JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="; - }; - }; - "smtp-connection-4.0.2" = { - name = "smtp-connection"; - packageName = "smtp-connection"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/smtp-connection/-/smtp-connection-4.0.2.tgz"; - sha1 = "d9dd68d38569f3ad9265473670d09d8f3ea518db"; - }; - }; - "smtp-server-3.5.0" = { - name = "smtp-server"; - packageName = "smtp-server"; - version = "3.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/smtp-server/-/smtp-server-3.5.0.tgz"; - sha512 = "7FUg09H1VmqMRlUq/QdkPxn/NK8VCFw7GMU5rdWWDbS00wbLhjRBe3Lme+AamjDSmVoP6e/WqFqsa7jVI+69pg=="; - }; - }; - "socket.io-2.2.0" = { - name = "socket.io"; - packageName = "socket.io"; - version = "2.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz"; - sha512 = "wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w=="; - }; - }; - "socket.io-adapter-1.1.2" = { - name = "socket.io-adapter"; - packageName = "socket.io-adapter"; - version = "1.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz"; - sha512 = "WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g=="; - }; - }; - "socket.io-client-2.2.0" = { - name = "socket.io-client"; - packageName = "socket.io-client"; - version = "2.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz"; - sha512 = "56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA=="; - }; - }; - "socket.io-parser-3.3.2" = { - name = "socket.io-parser"; - packageName = "socket.io-parser"; - version = "3.3.2"; - src = fetchurl { - url = "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz"; - sha512 = "FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg=="; - }; - }; - "statuses-1.5.0" = { - name = "statuses"; - packageName = "statuses"; - version = "1.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"; - sha1 = "161c7dac177659fd9811f43771fa99381478628c"; - }; - }; - "to-array-0.1.4" = { - name = "to-array"; - packageName = "to-array"; - version = "0.1.4"; - src = fetchurl { - url = "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz"; - sha1 = "17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"; - }; - }; - "toidentifier-1.0.0" = { - name = "toidentifier"; - packageName = "toidentifier"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"; - sha512 = "yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="; - }; - }; - "type-is-1.6.18" = { - name = "type-is"; - packageName = "type-is"; - version = "1.6.18"; - src = fetchurl { - url = "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"; - sha512 = "TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="; - }; - }; - "unpipe-1.0.0" = { - name = "unpipe"; - packageName = "unpipe"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"; - sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec"; - }; - }; - "utils-merge-1.0.1" = { - name = "utils-merge"; - packageName = "utils-merge"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"; - sha1 = "9f95710f50a267947b2ccc124741c1028427e713"; - }; - }; - "uue-3.1.2" = { - name = "uue"; - packageName = "uue"; - version = "3.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/uue/-/uue-3.1.2.tgz"; - sha512 = "axKLXVqwtdI/czrjG0X8hyV1KLgeWx8F4KvSbvVCnS+RUvsQMGRjx0kfuZDXXqj0LYvVJmx3B9kWlKtEdRrJLg=="; - }; - }; - "vary-1.1.2" = { - name = "vary"; - packageName = "vary"; - version = "1.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"; - sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc"; - }; - }; - "wildstring-1.0.9" = { - name = "wildstring"; - packageName = "wildstring"; - version = "1.0.9"; - src = fetchurl { - url = "https://registry.npmjs.org/wildstring/-/wildstring-1.0.9.tgz"; - sha1 = "82a696d5653c7d4ec9ba716859b6b53aba2761c5"; - }; - }; - "wrappy-1.0.2" = { - name = "wrappy"; - packageName = "wrappy"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"; - sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; - }; - }; - "ws-6.1.4" = { - name = "ws"; - packageName = "ws"; - version = "6.1.4"; - src = fetchurl { - url = "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz"; - sha512 = "eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA=="; - }; - }; - "xmlhttprequest-ssl-1.5.5" = { - name = "xmlhttprequest-ssl"; - packageName = "xmlhttprequest-ssl"; - version = "1.5.5"; - src = fetchurl { - url = "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz"; - sha1 = "c2876b06168aadc40e57d97e81191ac8f4398b3e"; - }; - }; - "yeast-0.1.2" = { - name = "yeast"; - packageName = "yeast"; - version = "0.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz"; - sha1 = "008e06d8094320c372dbc2f8ed76a0ca6c8ac419"; - }; - }; - }; -in -{ - maildev = nodeEnv.buildNodePackage { + sources = {}; + args = { name = "maildev"; packageName = "maildev"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/maildev/-/maildev-1.1.0.tgz"; - sha512 = "D7mrEM/i4c5AX72aRBN9mO5snsGhEs7MvNFWmrSsRL94sIH0/zVQ1GE+ysN9J7lFMLkXNy2xPG3SGP2cjPrCRw=="; - }; - dependencies = [ - sources."accepts-1.3.7" - sources."addressparser-1.0.1" - sources."after-0.8.2" - sources."array-flatten-1.1.1" - sources."arraybuffer.slice-0.0.7" - sources."async-3.2.0" - sources."async-limiter-1.0.1" - sources."backo2-1.0.2" - sources."balanced-match-1.0.2" - sources."base32.js-0.1.0" - sources."base64-arraybuffer-0.1.5" - sources."base64id-1.0.0" - sources."better-assert-1.0.2" - sources."blob-0.0.5" - sources."body-parser-1.19.0" - sources."brace-expansion-1.1.11" - sources."bytes-3.1.0" - sources."callsite-1.0.0" - sources."commander-2.20.3" - sources."component-bind-1.0.0" - sources."component-emitter-1.2.1" - sources."component-inherit-0.0.3" - sources."concat-map-0.0.1" - sources."content-disposition-0.5.3" - sources."content-type-1.0.4" - sources."cookie-0.4.0" - sources."cookie-signature-1.0.6" - sources."cors-2.8.5" - sources."debug-2.6.9" - sources."depd-1.1.2" - sources."destroy-1.0.4" - sources."ee-first-1.1.1" - sources."encodeurl-1.0.2" - (sources."engine.io-3.3.2" // { - dependencies = [ - sources."cookie-0.3.1" - sources."debug-3.1.0" - ]; - }) - (sources."engine.io-client-3.3.2" // { - dependencies = [ - sources."debug-3.1.0" - ]; - }) - sources."engine.io-parser-2.1.3" - sources."escape-html-1.0.3" - sources."escape-string-regexp-1.0.5" - sources."etag-1.8.1" - sources."express-4.17.1" - sources."extend-3.0.2" - sources."finalhandler-1.1.2" - sources."forwarded-0.1.2" - sources."fresh-0.5.2" - sources."fs.realpath-1.0.0" - sources."glob-7.1.7" - sources."has-binary2-1.0.3" - sources."has-cors-1.1.0" - sources."http-errors-1.7.2" - sources."iconv-lite-0.4.24" - sources."indexof-0.0.1" - sources."inflight-1.0.6" - sources."inherits-2.0.3" - sources."ipaddr.js-1.9.1" - sources."ipv6-normalize-1.0.1" - sources."is-wsl-1.1.0" - sources."isarray-2.0.1" - sources."mailparser-mit-1.0.0" - sources."media-typer-0.3.0" - sources."merge-descriptors-1.0.1" - sources."methods-1.1.2" - sources."mime-1.6.0" - sources."mime-db-1.47.0" - sources."mime-types-2.1.30" - sources."minimatch-3.0.4" - sources."ms-2.0.0" - sources."negotiator-0.6.2" - sources."nodemailer-3.1.8" - sources."object-assign-4.1.1" - sources."object-component-0.0.3" - sources."on-finished-2.3.0" - sources."once-1.4.0" - sources."opn-6.0.0" - sources."parseqs-0.0.5" - sources."parseuri-0.0.5" - sources."parseurl-1.3.3" - sources."path-is-absolute-1.0.1" - sources."path-to-regexp-0.1.7" - sources."proxy-addr-2.0.6" - sources."qs-6.7.0" - sources."range-parser-1.2.1" - sources."raw-body-2.4.0" - sources."rimraf-2.7.1" - sources."safe-buffer-5.1.2" - sources."safer-buffer-2.1.2" - (sources."send-0.17.1" // { - dependencies = [ - sources."ms-2.1.1" - ]; - }) - sources."serve-static-1.14.1" - sources."setprototypeof-1.1.1" - sources."smtp-connection-4.0.2" - (sources."smtp-server-3.5.0" // { - dependencies = [ - sources."nodemailer-5.0.0" - ]; - }) - (sources."socket.io-2.2.0" // { - dependencies = [ - sources."debug-4.1.1" - sources."ms-2.1.3" - ]; - }) - sources."socket.io-adapter-1.1.2" - (sources."socket.io-client-2.2.0" // { - dependencies = [ - sources."debug-3.1.0" - ]; - }) - (sources."socket.io-parser-3.3.2" // { - dependencies = [ - sources."component-emitter-1.3.0" - sources."debug-3.1.0" - ]; - }) - sources."statuses-1.5.0" - sources."to-array-0.1.4" - sources."toidentifier-1.0.0" - sources."type-is-1.6.18" - sources."unpipe-1.0.0" - sources."utils-merge-1.0.1" - sources."uue-3.1.2" - sources."vary-1.1.2" - sources."wildstring-1.0.9" - sources."wrappy-1.0.2" - sources."ws-6.1.4" - sources."xmlhttprequest-ssl-1.5.5" - sources."yeast-0.1.2" - ]; + version = "27.4.56"; + src = ../..; buildInputs = globalBuildInputs; meta = { - description = "SMTP Server and Web Interface for reading and testing emails during development"; - homepage = "http://djfarrelly.github.io/MailDev/"; - license = "MIT"; + description = ""; + license = "AGPL-3.0-or-later"; }; production = true; bypassCache = true; - reconstructLock = true; + reconstructLock = false; }; +in +{ + args = args; + sources = sources; + tarball = nodeEnv.buildNodeSourceDist args; + package = nodeEnv.buildNodePackage args; + shell = nodeEnv.buildNodeShell args; + nodeDependencies = nodeEnv.buildNodeDependencies (lib.overrideExisting args { + src = stdenv.mkDerivation { + name = args.name + "-package-json"; + src = nix-gitignore.gitignoreSourcePure [ + "*" + "!package.json" + "!package-lock.json" + ] args.src; + dontBuild = true; + installPhase = "mkdir -p $out; cp -r ./* $out;"; + }; + }); } diff --git a/nix/maildev/node2nix.nix b/nix/maildev/node2nix.nix index 46a830f53..f1226a0a8 100644 --- a/nix/maildev/node2nix.nix +++ b/nix/maildev/node2nix.nix @@ -1,8 +1,4 @@ -# SPDX-FileCopyrightText: 2022-2024 Sarah Vaupel , Gregor Kleen -# -# SPDX-License-Identifier: AGPL-3.0-or-later - -# This file has been generated by node2nix 1.9.0. Do not edit! +# This file has been generated by node2nix 1.11.1. Do not edit! {pkgs ? import { inherit system; @@ -10,7 +6,7 @@ let nodeEnv = import ./node-env.nix { - inherit (pkgs) stdenv lib python2 runCommand writeTextFile; + inherit (pkgs) stdenv lib python2 runCommand writeTextFile writeShellScript; inherit pkgs nodejs; libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null; };