diff --git a/nixos/modules/services/web-apps/wiki-js.nix b/nixos/modules/services/web-apps/wiki-js.nix index 22682002532d..631740f51ce3 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 c17c3f7e95c9..604599c3ca1c 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;