summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nixos/modules/services/web-apps/wiki-js.nix2
-rw-r--r--pkgs/servers/web-apps/wiki-js/default.nix36
2 files changed, 36 insertions, 2 deletions
diff --git a/nixos/modules/services/web-apps/wiki-js.nix b/nixos/modules/services/web-apps/wiki-js.nix
index 22682002532..631740f51ce 100644
--- a/nixos/modules/services/web-apps/wiki-js.nix
+++ b/nixos/modules/services/web-apps/wiki-js.nix
@@ -133,7 +133,7 @@ in {
         WorkingDirectory = "/var/lib/${cfg.stateDirectoryName}";
         DynamicUser = true;
         PrivateTmp = true;
-        ExecStart = "${pkgs.nodejs_16}/bin/node ${pkgs.wiki-js}/server";
+        ExecStart = "${pkgs.nodejs_18}/bin/node ${pkgs.wiki-js}/server";
       };
     };
   };
diff --git a/pkgs/servers/web-apps/wiki-js/default.nix b/pkgs/servers/web-apps/wiki-js/default.nix
index c17c3f7e95c..604599c3ca1 100644
--- a/pkgs/servers/web-apps/wiki-js/default.nix
+++ b/pkgs/servers/web-apps/wiki-js/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, lib, nixosTests }:
+{ stdenv, fetchurl, lib, nixosTests, jq, moreutils }:
 
 stdenv.mkDerivation rec {
   pname = "wiki-js";
@@ -9,6 +9,40 @@ stdenv.mkDerivation rec {
     sha256 = "sha256-O7KQ134zh9ullYyQZimmxfdRwXeHkD8aAhy/pRzIjxo=";
   };
 
+  # Implements nodejs 18 support as it's not planned to fix this before
+  # the release of v3[1] which is planned to happen in 2023, but not before
+  # NixOS 23.05. However, in the lifespan of 23.05 v16 will get EOLed, so
+  # we have to hack this on our own.
+  #
+  # The problem we fix here is that `exports."/public/"` in a `package.json`
+  # is prohibited, i.e. you cannot export full directories anymore.
+  #
+  # Unfortunately it's non-trivial to fix this because v10 of `extract-files`
+  # (where the problem is fixed) doesn't work for graphql-tools (which depends
+  # on this). Updating this as well is also quite complex because in later
+  # versions the package was split up into multiple smaller packages and
+  # thus a lot of parts of the code-base would need to be changed accordingly.
+  #
+  # Since this is the only breaking change of nodejs 17/18[2][3], this workaround
+  # will be necessary until we can upgrade to v3.
+  #
+  # [1] https://github.com/requarks/wiki/discussions/6388
+  # [2] https://nodejs.org/en/blog/release/v17.0.0
+  # [3] https://nodejs.org/en/blog/release/v18.0.0
+  nativeBuildInputs = [ jq moreutils ];
+  postPatch = ''
+    # Dirty hack to implement nodejs-18 support.
+    <./node_modules/extract-files/package.json jq '
+      # error out loud if the structure has changed and we need to change
+      # this expression
+      if .exports|has("./public/")|not then
+        halt_error(1)
+      else
+        .exports."./public/*" = "./public/*.js" | del(.exports."./public/")
+      end
+    ' | sponge ./node_modules/extract-files/package.json
+  '';
+
   sourceRoot = ".";
 
   dontBuild = true;