1{
2 stdenv, pkgs, nodejs
3
4 # Self-reference
5, self
6
7 # Needed natives for installation
8, neededNatives ? [pkgs.python] ++ stdenv.lib.optionals stdenv.isLinux [ pkgs.utillinux ]
9
10 # Attribute set of generated packages
11, generated ? pkgs.callPackage ./node-packages-generated.nix { inherit self; }
12
13 # Attribute set of overrides
14, overrides ? {}
15, ...
16} @ args:
17
18with stdenv.lib;
19
20let
21 removeDeps = remove: deps: filterAttrs (n: d: all (r: r != d.pkgName) remove) deps;
22 replaceDep = replace: deps: mapAttrs (n: d: if d.pkgName == replace.pkgName then replace else d) deps;
23in rec {
24 overrides = {
25 phantomjs.buildInputs = [ pkgs.phantomjs ];
26 "node-expat".buildInputs = [ pkgs.expat ];
27 "node-stringprep".buildInputs = [ pkgs.icu pkgs.which ];
28 "node-protobuf".buildInputs = [ pkgs.protobuf ];
29
30 "tap-0.3.3".patchPhase = ''
31 substituteInPlace package.json --replace '"tap-consumer",' ""
32 '';
33 "node-uptime" = (p: {
34 # Net-ping is not really used
35 patchPhase = ''
36 ${self.json}/bin/json -I -f package.json -e 'delete this.dependencies["net-ping"]'
37 '';
38 deps = removeDeps ["net-ping"] p.deps;
39 });
40 bipio = (p: {
41 patchPhase = ''
42 substituteInPlace src/bootstrap.js --replace "memwatch = require('memwatch')," ""
43 ${self.json}/bin/json -I -f package.json -e 'this.scripts.install=""'
44 ${self.json}/bin/json -I -f package.json -e 'delete this.dependencies.sleep'
45 ${self.json}/bin/json -I -f package.json -e 'delete this.dependencies.memwatch'
46 ${self.json}/bin/json -I -f package.json -e 'delete this.dependencies["webkit-devtools-agent"]'
47 '';
48 deps = replaceDep self.sleep (removeDeps ["memwatch" "webkit-devtools-agent"] p.deps);
49 });
50 bip-pod.patchPhase = ''
51 substituteInPlace index.js --replace \
52 "__dirname + (literal ? '/' : '/../bip-pod-') + podName" \
53 "(literal ? __dirname + '/' : \"bip-pod-\") + podName"
54 '';
55 webdrvr.preBuild = ''
56 mkdir ../webdrvr
57 ln -s ${pkgs.fetchurl {
58 url = "https://selenium-release.storage.googleapis.com/2.43/selenium-server-standalone-2.43.1.jar";
59 sha1 = "ef1b5f8ae9c99332f99ba8794988a1d5b974d27b";
60 }} ../webdrvr/selenium-server-standalone-2.43.1.jar
61 ln -s ${pkgs.fetchurl {
62 url = "http://chromedriver.storage.googleapis.com/2.10/chromedriver_linux64.zip";
63 sha1 = "26220f7e43ee3c0d714860db61c4d0ecc9bb3d89";
64 }} ../webdrvr/chromedriver_linux64.zip
65 '';
66 bower2nix.buildInputs = [ pkgs.makeWrapper ];
67 bower2nix.postInstall = ''
68 for prog in bower2nix fetch-bower; do
69 wrapProgram "$out/bin/$prog" --prefix PATH : "${pkgs.git}/bin"
70 done
71 '';
72 } // args.overrides or {};
73
74 # Apply overrides and back compatiblity transformations
75 buildNodePackage = {...} @ args:
76 let
77 pkg = makeOverridable (
78 pkgs.callPackage ../development/web/nodejs/build-node-package.nix {
79 inherit nodejs neededNatives;
80 }
81 ) (args // (optionalAttrs (isList args.src) {
82 # Backwards compatibility
83 src = head args.src;
84 }) // (optionalAttrs (attrByPath ["passthru" "names"] null args != null) {
85 pkgName = head args.passthru.names;
86 }));
87
88 override = overrides.${args.name} or overrides.${pkg.pkgName} or {};
89
90 in pkg.override override;
91
92 # Backwards compatibility
93 patchSource = fn: srcAttrs: fn srcAttrs;
94 patchLatest = patchSource pkgs.fetchurl;
95
96 /* Put manual packages below here (ideally eventually managed by npm2nix */
97} // (
98 if isAttrs generated then generated
99
100 # Backwards compatiblity
101 else pkgs.callPackage generated { inherit self; }
102)