2022-11-04T08:49:17 haste-server 0 -> 1 2022-11-04T08:49:20 attrpath: haste-server 2022-11-04T08:49:21 Checking auto update branch... 2022-11-04T08:49:26 [version] 2022-11-04T08:49:26 [version] skipping because derivation has updateScript 2022-11-04T08:49:26 [rustCrateVersion] 2022-11-04T08:49:26 [rustCrateVersion] No cargoSha256 found 2022-11-04T08:49:26 [golangModuleVersion] 2022-11-04T08:49:26 [golangModuleVersion] Not a buildGoModule package with vendorSha256 2022-11-04T08:49:26 [updateScript] 2022-11-04T08:50:12 [updateScript] Success 2022-11-04T08:50:12 [updateScript] this derivation will be built: /nix/store/ipj26wpdc5b8hyn68s4iz5245wdpmb3r-packages.json.drv building '/nix/store/ipj26wpdc5b8hyn68s4iz5245wdpmb3r-packages.json.drv'... Going to be running update for following packages: - haste-server-787d839086faee0b55c76ce5944fa207d22e85b4 Press Enter key to continue... Running update for: - haste-server-787d839086faee0b55c76ce5944fa207d22e85b4: UPDATING ... - haste-server-787d839086faee0b55c76ce5944fa207d22e85b4: DONE. Packages updated! 2022-11-04T08:50:12 2022-11-04T08:50:12 [quotedUrls] 2022-11-04T08:50:12 [quotedUrls] nothing found to replace 2022-11-04T08:50:13 Diff after rewrites: diff --git a/pkgs/servers/haste-server/default.nix b/pkgs/servers/haste-server/default.nix index 32cba0c3344..de1747ac285 100644 --- a/pkgs/servers/haste-server/default.nix +++ b/pkgs/servers/haste-server/default.nix @@ -9,13 +9,13 @@ stdenv.mkDerivation rec { pname = "haste-server"; - version = "787d839086faee0b55c76ce5944fa207d22e85b4"; + version = "20919c946602b8151157f647e475e30687a43727"; src = fetchFromGitHub { owner = "toptal"; repo = "haste-server"; rev = version; - hash = "sha256-68IFY9YmXi4acTs9oXw6f5w7gg1lh+iakwYJciTPkQE="; + hash = "sha256-IPGsddPRu4/jT1NsUNOwUjSL3+ikGzMR3X3ohY66uAk="; }; nativeBuildInputs = [ diff --git a/pkgs/servers/haste-server/node-deps.nix b/pkgs/servers/haste-server/node-deps.nix index 93129e38db6..863f58ef2db 100644 --- a/pkgs/servers/haste-server/node-deps.nix +++ b/pkgs/servers/haste-server/node-deps.nix @@ -841,13 +841,13 @@ let sha512 = "AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="; }; }; - "pg-8.7.3" = { + "pg-8.8.0" = { name = "pg"; packageName = "pg"; - version = "8.7.3"; + version = "8.8.0"; src = fetchurl { - url = "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz"; - sha512 = "HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw=="; + url = "https://registry.npmjs.org/pg/-/pg-8.8.0.tgz"; + sha512 = "UXYN0ziKj+AeNNP7VDMwrehpACThH7LUl/p8TDFpEUuSejCUIwGSfxpHsPvtM6/WXFy6SU4E5RG4IJV/TZAGjw=="; }; }; "pg-connection-string-2.5.0" = { @@ -868,13 +868,13 @@ let sha512 = "WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="; }; }; - "pg-pool-3.5.1" = { + "pg-pool-3.5.2" = { name = "pg-pool"; packageName = "pg-pool"; - version = "3.5.1"; + version = "3.5.2"; src = fetchurl { - url = "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz"; - sha512 = "6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ=="; + url = "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz"; + sha512 = "His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w=="; }; }; "pg-protocol-1.5.0" = { @@ -1198,7 +1198,7 @@ let version = "1.0.0"; src = fetchurl { url = "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"; - sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec"; + sha512 = "pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="; }; }; "util-deprecate-1.0.2" = { @@ -1207,7 +1207,7 @@ let version = "1.0.2"; src = fetchurl { url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"; - sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; + sha512 = "EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="; }; }; "utils-merge-1.0.1" = { @@ -1216,7 +1216,7 @@ let version = "1.0.1"; src = fetchurl { url = "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"; - sha1 = "9f95710f50a267947b2ccc124741c1028427e713"; + sha512 = "pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="; }; }; "which-2.0.2" = { @@ -1270,7 +1270,7 @@ let version = "1.0.2"; src = fetchurl { url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"; - sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; + sha512 = "l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="; }; }; "xtend-4.0.2" = { @@ -1297,7 +1297,7 @@ let version = "2.1.2"; src = fetchurl { url = "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz"; - sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52"; + sha512 = "ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="; }; }; "yargs-16.2.0" = { @@ -1341,7 +1341,7 @@ let name = "haste"; packageName = "haste"; version = "0.1.0"; - src = ../../../../../../../../../nix/store/sa8y38xfqrbklwvwb484fgx0lgks9wa1-source; + src = ../../../../../../../../../nix/store/ksl6h7h03ks119z1skfipjh4irc8x80c-source; dependencies = [ sources."@ungap/promise-all-settled-1.1.2" sources."ansi-colors-4.1.1" @@ -1456,10 +1456,10 @@ let sources."parseurl-1.3.3" sources."path-exists-4.0.0" sources."path-is-absolute-1.0.1" - sources."pg-8.7.3" + sources."pg-8.8.0" sources."pg-connection-string-2.5.0" sources."pg-int8-1.0.1" - sources."pg-pool-3.5.1" + sources."pg-pool-3.5.2" sources."pg-protocol-1.5.0" sources."pg-types-2.2.0" sources."pgpass-1.0.5" diff --git a/pkgs/servers/haste-server/node-env.nix b/pkgs/servers/haste-server/node-env.nix index 2590dd267a4..5dad9ec63d4 100644 --- a/pkgs/servers/haste-server/node-env.nix +++ b/pkgs/servers/haste-server/node-env.nix @@ -165,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)); @@ -270,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'); @@ -280,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); @@ -314,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"; @@ -377,13 +460,18 @@ 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 2022-11-04T08:52:16 An auto update branch exists with message `haste-server: 787d839086faee0b55c76ce5944fa207d22e85b4 -> 20919c946602b8151157f647e475e30687a43727`. New version is 20919c946602b8151157f647e475e30687a43727. 2022-11-04T08:52:16 An auto update branch exists with an equal or greater version 2022-11-04T23:04:54 haste-server 0 -> 1 2022-11-04T23:04:56 attrpath: haste-server 2022-11-04T23:04:56 Checking auto update branch... 2022-11-04T23:04:59 [version] 2022-11-04T23:04:59 [version] skipping because derivation has updateScript 2022-11-04T23:04:59 [rustCrateVersion] 2022-11-04T23:04:59 [rustCrateVersion] No cargoSha256 found 2022-11-04T23:04:59 [golangModuleVersion] 2022-11-04T23:04:59 [golangModuleVersion] Not a buildGoModule package with vendorSha256 2022-11-04T23:04:59 [updateScript] 2022-11-04T23:05:35 [updateScript] Success 2022-11-04T23:05:35 [updateScript] Going to be running update for following packages: - haste-server-787d839086faee0b55c76ce5944fa207d22e85b4 Press Enter key to continue... Running update for: - haste-server-787d839086faee0b55c76ce5944fa207d22e85b4: UPDATING ... - haste-server-787d839086faee0b55c76ce5944fa207d22e85b4: DONE. Packages updated! 2022-11-04T23:05:35 2022-11-04T23:05:35 [quotedUrls] 2022-11-04T23:05:35 [quotedUrls] nothing found to replace 2022-11-04T23:05:36 Diff after rewrites: diff --git a/pkgs/servers/haste-server/default.nix b/pkgs/servers/haste-server/default.nix index 32cba0c3344..de1747ac285 100644 --- a/pkgs/servers/haste-server/default.nix +++ b/pkgs/servers/haste-server/default.nix @@ -9,13 +9,13 @@ stdenv.mkDerivation rec { pname = "haste-server"; - version = "787d839086faee0b55c76ce5944fa207d22e85b4"; + version = "20919c946602b8151157f647e475e30687a43727"; src = fetchFromGitHub { owner = "toptal"; repo = "haste-server"; rev = version; - hash = "sha256-68IFY9YmXi4acTs9oXw6f5w7gg1lh+iakwYJciTPkQE="; + hash = "sha256-IPGsddPRu4/jT1NsUNOwUjSL3+ikGzMR3X3ohY66uAk="; }; nativeBuildInputs = [ diff --git a/pkgs/servers/haste-server/node-deps.nix b/pkgs/servers/haste-server/node-deps.nix index 93129e38db6..863f58ef2db 100644 --- a/pkgs/servers/haste-server/node-deps.nix +++ b/pkgs/servers/haste-server/node-deps.nix @@ -841,13 +841,13 @@ let sha512 = "AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="; }; }; - "pg-8.7.3" = { + "pg-8.8.0" = { name = "pg"; packageName = "pg"; - version = "8.7.3"; + version = "8.8.0"; src = fetchurl { - url = "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz"; - sha512 = "HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw=="; + url = "https://registry.npmjs.org/pg/-/pg-8.8.0.tgz"; + sha512 = "UXYN0ziKj+AeNNP7VDMwrehpACThH7LUl/p8TDFpEUuSejCUIwGSfxpHsPvtM6/WXFy6SU4E5RG4IJV/TZAGjw=="; }; }; "pg-connection-string-2.5.0" = { @@ -868,13 +868,13 @@ let sha512 = "WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="; }; }; - "pg-pool-3.5.1" = { + "pg-pool-3.5.2" = { name = "pg-pool"; packageName = "pg-pool"; - version = "3.5.1"; + version = "3.5.2"; src = fetchurl { - url = "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz"; - sha512 = "6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ=="; + url = "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz"; + sha512 = "His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w=="; }; }; "pg-protocol-1.5.0" = { @@ -1198,7 +1198,7 @@ let version = "1.0.0"; src = fetchurl { url = "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"; - sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec"; + sha512 = "pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="; }; }; "util-deprecate-1.0.2" = { @@ -1207,7 +1207,7 @@ let version = "1.0.2"; src = fetchurl { url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"; - sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; + sha512 = "EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="; }; }; "utils-merge-1.0.1" = { @@ -1216,7 +1216,7 @@ let version = "1.0.1"; src = fetchurl { url = "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"; - sha1 = "9f95710f50a267947b2ccc124741c1028427e713"; + sha512 = "pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="; }; }; "which-2.0.2" = { @@ -1270,7 +1270,7 @@ let version = "1.0.2"; src = fetchurl { url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"; - sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; + sha512 = "l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="; }; }; "xtend-4.0.2" = { @@ -1297,7 +1297,7 @@ let version = "2.1.2"; src = fetchurl { url = "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz"; - sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52"; + sha512 = "ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="; }; }; "yargs-16.2.0" = { @@ -1341,7 +1341,7 @@ let name = "haste"; packageName = "haste"; version = "0.1.0"; - src = ../../../../../../../../../nix/store/sa8y38xfqrbklwvwb484fgx0lgks9wa1-source; + src = ../../../../../../../../../nix/store/ksl6h7h03ks119z1skfipjh4irc8x80c-source; dependencies = [ sources."@ungap/promise-all-settled-1.1.2" sources."ansi-colors-4.1.1" @@ -1456,10 +1456,10 @@ let sources."parseurl-1.3.3" sources."path-exists-4.0.0" sources."path-is-absolute-1.0.1" - sources."pg-8.7.3" + sources."pg-8.8.0" sources."pg-connection-string-2.5.0" sources."pg-int8-1.0.1" - sources."pg-pool-3.5.1" + sources."pg-pool-3.5.2" sources."pg-protocol-1.5.0" sources."pg-types-2.2.0" sources."pgpass-1.0.5" diff --git a/pkgs/servers/haste-server/node-env.nix b/pkgs/servers/haste-server/node-env.nix index 2590dd267a4..5dad9ec63d4 100644 --- a/pkgs/servers/haste-server/node-env.nix +++ b/pkgs/servers/haste-server/node-env.nix @@ -165,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)); @@ -270,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'); @@ -280,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); @@ -314,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"; @@ -377,13 +460,18 @@ 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 2022-11-04T23:07:07 An auto update branch exists with message `haste-server: 787d839086faee0b55c76ce5944fa207d22e85b4 -> 20919c946602b8151157f647e475e30687a43727`. New version is 20919c946602b8151157f647e475e30687a43727. 2022-11-04T23:07:07 An auto update branch exists with an equal or greater version