about summary refs log tree commit diff
path: root/pkgs/top-level/node-packages.nix
blob: e38cd3e693643720f44dc262ef66150fa04de072 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{ pkgs, stdenv, nodejs, fetchurl, neededNatives }:

let
  inherit (self) buildNodePackage patchLatest;

  importGeneratedPackages = generated: nativeDeps: self: builtins.listToAttrs (pkgs.lib.fold (pkg: pairs:
    (pkgs.lib.optional pkg.topLevel { name = pkg.baseName; value = builtins.getAttr pkg.fullName self; }) ++ [
      {
        name = pkg.fullName;
        value = buildNodePackage rec {
          name = "${pkg.baseName}-${pkg.version}";
          src = (if pkg.patchLatest then patchLatest else fetchurl) {
            url = "http://registry.npmjs.org/${pkg.baseName}/-/${name}.tgz";
            sha256 = pkg.hash;
          };
          deps = map (dep: builtins.getAttr "${dep.name}-${dep.range}" self) pkg.dependencies;
          buildInputs = if builtins.hasAttr name nativeDeps then builtins.getAttr name nativeDeps else [];
        };
      }
    ] ++ pairs
  ) [] generated);

  self = {
    inherit importGeneratedPackages;

    nativeDeps = {
      "node-expat-*" = [ pkgs.expat ];
      "rbytes-0.0.2" = [ pkgs.openssl ];
    };

    buildNodePackage = import ../development/web/nodejs/build-node-package.nix {
      inherit stdenv nodejs neededNatives;
      inherit (pkgs) runCommand;
    };

    patchLatest = srcAttrs:
      let src = fetchurl srcAttrs; in pkgs.runCommand src.name {} ''
        mkdir unpack
        cd unpack
        tar xf ${src}
        mv */ package 2>/dev/null || true
        sed -i -e "s/: \"latest\"/: \"*\"/" package/package.json
        tar cf $out *
      '';

    /* Put manual packages below here (ideally eventually managed by npm2nix */
  } // importGeneratedPackages (import ./node-packages-generated.nix) self.nativeDeps self;
in self