summary refs log tree commit diff
path: root/flake.nix
blob: 00a18f640292e7f7e424ad266451fcf0ce77db9b (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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
{
  description = "Spacebar server, written in Typescript.";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachSystem flake-utils.lib.allSystems (system:
      let
        pkgs = import nixpkgs {
          inherit system;
        };
        hashesFile = builtins.fromJSON (builtins.readFile ./hashes.json);
      in rec {
        packages.default = pkgs.buildNpmPackage {
          pname = "spacebar-server-ts";
          src = ./.;
          name = "spacebar-server-ts";
          nativeBuildInputs = with pkgs; [ python3 ];
          npmDepsHash = hashesFile.npmDepsHash;
          makeCacheWritable = true;
          postPatch = ''
            substituteInPlace package.json --replace 'npx patch-package' '${pkgs.nodePackages.patch-package}/bin/patch-package'
          '';
          installPhase = ''
            runHook preInstall
            set -x
            #remove packages not needed for production, or at least try to...
            npm prune --omit dev --no-save $npmInstallFlags "''${npmInstallFlagsArray[@]}" $npmFlags "''${npmFlagsArray[@]}"
            find node_modules -maxdepth 1 -type d -empty -delete

            mkdir -p $out/node_modules/
            cp -r node_modules/* $out/node_modules/
            cp -r dist/ $out/node_modules/@spacebar
            for i in dist/**/start.js
            do
              makeWrapper ${pkgs.nodejs-slim}/bin/node $out/bin/start-`dirname ''${i/dist\//}` --prefix NODE_PATH : $out/node_modules --add-flags $out/node_modules/@spacebar`dirname ''${i/dist/}`/start.js
            done
            set +x
            substituteInPlace package.json --replace 'dist/' 'node_modules/@spacebar/'
            find $out/node_modules/@spacebar/ -type f -name "*.js" | while read srcFile; do
              echo Patching imports in ''${srcFile/$out\/node_modules\/@spacebar//}...
              substituteInPlace $srcFile --replace 'require("./' 'require(__dirname + "/'
              substituteInPlace $srcFile --replace 'require("../' 'require(__dirname + "/../'
              substituteInPlace $srcFile --replace ', "assets"' ', "..", "assets"'
              #substituteInPlace $srcFile --replace 'require("@spacebar/' 'require("
            done
            set -x
            cp -r assets/ $out/
            cp package.json $out/
            rm -v $out/assets/openapi.json
            #rm -v $out/assets/schemas.json

            #debug utils:
            #cp $out/node_modules/@spacebar/ $out/build_output -r
            set +x
            runHook postInstall
          '';
        };
        devShell = pkgs.mkShell {
          buildInputs = with pkgs; [
            nodejs
            nodePackages.typescript
          ];
        };
      }
    );
}