nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 fetchPnpmDeps,
6 pnpmConfigHook,
7 pnpm,
8 nodejs,
9 nix-update-script,
10 makeBinaryWrapper,
11}:
12stdenv.mkDerivation (finalAttrs: {
13 pname = "vue-language-server";
14 version = "3.2.2";
15
16 src = fetchFromGitHub {
17 owner = "vuejs";
18 repo = "language-tools";
19 rev = "v${finalAttrs.version}";
20 hash = "sha256-oVIWRCnJkJK1CsgNp7l95uuILeXv2XuwwfGElGnOEyU=";
21 };
22
23 pnpmDeps = fetchPnpmDeps {
24 inherit (finalAttrs) pname version src;
25 fetcherVersion = 1;
26 hash = "sha256-lxRify3uJnqYH6btmXU9yaO8LJDGBZcyONLUHv2rLqg=";
27 };
28
29 nativeBuildInputs = [
30 nodejs
31 pnpmConfigHook
32 pnpm
33 makeBinaryWrapper
34 ];
35
36 buildPhase = ''
37 runHook preBuild
38 pnpm run build packages/language-server
39 runHook postBuild
40 '';
41
42 preInstall = ''
43 # the mv commands are workaround for https://github.com/pnpm/pnpm/issues/8307
44 mv packages packages.dontpruneme
45 CI=true pnpm prune --prod
46 find packages.dontpruneme/**/node_modules -xtype l -delete
47 mv packages.dontpruneme packages
48
49 find -type f \( -name "*.ts" -o -name "*.map" \) -exec rm -rf {} +
50
51 # https://github.com/pnpm/pnpm/issues/3645
52 find node_modules packages/language-server/node_modules -xtype l -delete
53
54 # remove non-deterministic files
55 rm node_modules/.modules.yaml node_modules/.pnpm-workspace-state-v1.json
56 '';
57
58 installPhase = ''
59 runHook preInstall
60
61 mkdir -p $out/{bin,lib/language-tools}
62 cp -r {node_modules,packages,extensions} $out/lib/language-tools/
63
64 makeWrapper ${lib.getExe nodejs} $out/bin/vue-language-server \
65 --inherit-argv0 \
66 --add-flags $out/lib/language-tools/packages/language-server/bin/vue-language-server.js
67
68 runHook postInstall
69 '';
70
71 passthru.updateScript = nix-update-script { };
72
73 meta = {
74 description = "Official Vue.js language server";
75 homepage = "https://github.com/vuejs/language-tools#readme";
76 changelog = "https://github.com/vuejs/language-tools/releases/tag/v${finalAttrs.version}";
77 license = lib.licenses.mit;
78 maintainers = with lib.maintainers; [ friedow ];
79 mainProgram = "vue-language-server";
80 };
81})