|
16 | 16 |
|
17 | 17 | # Read versions from package.json
|
18 | 18 | packageJson = builtins.fromJSON (builtins.readFile ./package.json);
|
19 |
| - versions = { |
| 19 | + versions = let |
| 20 | + # Extract version from packageManager string (e.g., "pnpm@9.12.3+sha512...") |
| 21 | + pnpmFull = packageJson.packageManager or "pnpm@9.12.3"; |
| 22 | + pnpmVersion = builtins.head (builtins.match "pnpm@([^+]+).*" pnpmFull); |
| 23 | + in { |
20 | 24 | nodejs = builtins.replaceStrings ["^" "~"] ["" ""] packageJson.engines.node;
|
21 |
| - pnpm = builtins.replaceStrings ["^" "~"] ["" ""] packageJson.engines.pnpm; |
| 25 | + pnpm = pnpmVersion; |
22 | 26 | };
|
23 | 27 |
|
24 |
| - # Function to fetch and hash a URL |
25 |
| - fetchUrlHash = url: let |
26 |
| - file = builtins.fetchurl url; |
27 |
| - hash = builtins.hashFile "sha256" file; |
28 |
| - in "sha256-${hash}"; |
29 |
| - |
30 |
| - # Generate hashes for Node.js and pnpm |
31 |
| - nodeHashes = { |
32 |
| - darwin-x64 = fetchUrlHash "https://nodejs.org/dist/v${versions.nodejs}/node-v${versions.nodejs}-darwin-x64.tar.gz"; |
33 |
| - darwin-arm64 = fetchUrlHash "https://nodejs.org/dist/v${versions.nodejs}/node-v${versions.nodejs}-darwin-arm64.tar.gz"; |
34 |
| - linux-x64 = fetchUrlHash "https://nodejs.org/dist/v${versions.nodejs}/node-v${versions.nodejs}-linux-x64.tar.gz"; |
35 |
| - linux-arm64 = fetchUrlHash "https://nodejs.org/dist/v${versions.nodejs}/node-v${versions.nodejs}-linux-arm64.tar.gz"; |
36 |
| - }; |
| 28 | + # Function to fetch Node.js tarball with hash |
| 29 | + fetchNodeJs = version: platform: arch: |
| 30 | + pkgs.fetchurl { |
| 31 | + url = "https://nodejs.org/dist/v${version}/node-v${version}-${platform}-${arch}.tar.gz"; |
| 32 | + hash = null; # Nix will provide the correct hash when it fails |
| 33 | + }; |
37 | 34 |
|
38 |
| - pnpmHash = fetchUrlHash "https://registry.npmjs.org/pnpm/-/pnpm-${versions.pnpm}.tgz"; |
| 35 | + # Function to fetch pnpm tarball with hash |
| 36 | + fetchPnpm = version: |
| 37 | + pkgs.fetchurl { |
| 38 | + url = "https://registry.npmjs.org/pnpm/-/pnpm-${version}.tgz"; |
| 39 | + hash = null; # Nix will provide the correct hash when it fails |
| 40 | + }; |
39 | 41 |
|
40 | 42 | # Define specific Node.js version
|
41 | 43 | nodejs = pkgs.stdenv.mkDerivation rec {
|
42 | 44 | pname = "nodejs";
|
43 | 45 | version = versions.nodejs;
|
44 | 46 |
|
45 |
| - src = pkgs.fetchurl { |
46 |
| - url = "https://nodejs.org/dist/v${version}/node-v${version}-${ |
| 47 | + src = |
| 48 | + fetchNodeJs version |
| 49 | + ( |
47 | 50 | if pkgs.stdenv.isDarwin
|
48 | 51 | then "darwin"
|
49 | 52 | else "linux"
|
50 |
| - }-${ |
| 53 | + ) |
| 54 | + ( |
51 | 55 | if pkgs.stdenv.isx86_64
|
52 | 56 | then "x64"
|
53 | 57 | else "arm64"
|
54 |
| - }.tar.gz"; |
55 |
| - hash = |
56 |
| - nodeHashes |
57 |
| - ."${ |
58 |
| - if pkgs.stdenv.isDarwin |
59 |
| - then "darwin" |
60 |
| - else "linux" |
61 |
| - }-${ |
62 |
| - if pkgs.stdenv.isx86_64 |
63 |
| - then "x64" |
64 |
| - else "arm64" |
65 |
| - }"; |
66 |
| - }; |
| 58 | + ); |
67 | 59 |
|
68 | 60 | installPhase = ''
|
69 | 61 | mkdir -p $out
|
|
81 | 73 | name = "pnpm";
|
82 | 74 | version = versions.pnpm;
|
83 | 75 |
|
84 |
| - src = pkgs.fetchurl { |
85 |
| - url = "https://registry.npmjs.org/pnpm/-/pnpm-${versions.pnpm}.tgz"; |
86 |
| - hash = pnpmHash; |
87 |
| - }; |
| 76 | + src = fetchPnpm versions.pnpm; |
88 | 77 |
|
89 | 78 | buildInputs = [nodejs];
|
90 | 79 |
|
|
0 commit comments