Unverified Commit ca1ed6f4 authored by lassulus's avatar lassulus Committed by GitHub
Browse files

vue-language-server: rewrite package to fix the automatic package upgrades (#428590)

parents ca8bfc84 269b5cf9
Loading
Loading
Loading
Loading
+0 −1001

File deleted.

Preview size limit exceeded, changes collapsed.

+53 −16
Original line number Diff line number Diff line
{
  lib,
  buildNpmPackage,
  fetchurl,
  stdenv,
  fetchFromGitHub,
  pnpm,
  nodejs,
  nix-update-script,
  makeBinaryWrapper,
}:

buildNpmPackage rec {
stdenv.mkDerivation (finalAttrs: {
  pname = "vue-language-server";
  version = "3.0.1";

  src = fetchurl {
    url = "https://registry.npmjs.org/@vue/language-server/-/language-server-${version}.tgz";
    hash = "sha256-kSJgE94O1qYdd/YoRex8CJSprS15PpboTzChKnYj2nE=";
  src = fetchFromGitHub {
    owner = "vuejs";
    repo = "language-tools";
    rev = "v${finalAttrs.version}";
    hash = "sha256-VPN4XWZDT44GwUZNih9sH2AiOKr8800B748DRoZ6hWc=";
  };

  pnpmDeps = pnpm.fetchDeps {
    inherit (finalAttrs) pname version src;
    fetcherVersion = 1;
    hash = "sha256-X34wBcLHhCkpr6oFrUE33X8EjUjdSpV5TZQPYbMzRDs=";
  };

  npmDepsHash = "sha256-S1kmTeReoAn428HaHQbwFzQg75rQNFVKVT1HT9m+7K4=";
  forceGitDeps = true;
  nativeBuildInputs = [
    nodejs
    pnpm.configHook
    makeBinaryWrapper
  ];

  postPatch = ''
    ln -s ${./package-lock.json} package-lock.json
  buildPhase = ''
    runHook preBuild
    pnpm run build packages/language-server
    runHook postBuild
  '';

  dontNpmBuild = true;
  makeCacheWritable = true;
  preInstall = ''
    pnpm prune --prod
    find -type f \( -name "*.ts" -o -name "*.map" \) -exec rm -rf {} +

    # https://github.com/pnpm/pnpm/issues/3645
    find node_modules packages/language-server/node_modules -xtype l -delete

    # remove non-deterministic files
    rm node_modules/.modules.yaml node_modules/.pnpm-workspace-state-v1.json
  '';

  installPhase = ''
    runHook preInstall

    mkdir -p $out/{bin,lib/language-tools}
    cp -r {node_modules,packages,extensions} $out/lib/language-tools/

    makeWrapper ${lib.getExe nodejs} $out/bin/vue-language-server \
      --inherit-argv0 \
      --add-flags $out/lib/language-tools/packages/language-server/bin/vue-language-server.js

    runHook postInstall
  '';

  passthru.updateScript = ./update.sh;
  passthru.updateScript = nix-update-script { };

  meta = {
    description = "Official Vue.js language server";
    homepage = "https://github.com/vuejs/language-tools#readme";
    changelog = "https://github.com/vuejs/language-tools/releases/tag/v${version}";
    changelog = "https://github.com/vuejs/language-tools/releases/tag/v${finalAttrs.version}";
    license = lib.licenses.mit;
    maintainers = with lib.maintainers; [ friedow ];
    mainProgram = "vue-language-server";
  };
}
})
+0 −30
Original line number Diff line number Diff line
#! /usr/bin/env nix-shell
#! nix-shell -i bash -p gnused nix nodejs prefetch-npm-deps wget

set -euo pipefail
pushd "$(dirname "${BASH_SOURCE[0]}")"

version=$(npm view @vue/language-server version)
tarball="language-server-$version.tgz"
url="https://registry.npmjs.org/@vue/language-server/-/$tarball"

if [[ "$UPDATE_NIX_OLD_VERSION" == "$version" ]]; then
    echo "Already up to date!"
    exit 0
fi

sed -i 's#version = "[^"]*"#version = "'"$version"'"#' package.nix

sha256=$(nix-prefetch-url "$url")
src_hash=$(nix-hash --to-sri --type sha256 "$sha256")
sed -i 's#hash = "[^"]*"#hash = "'"$src_hash"'"#' package.nix

rm -f package-lock.json package.json *.tgz
wget "$url"
tar xf "$tarball" --strip-components=1 package/package.json
npm i --package-lock-only --ignore-scripts
npm_hash=$(prefetch-npm-deps package-lock.json)
sed -i 's#npmDepsHash = "[^"]*"#npmDepsHash = "'"$npm_hash"'"#' package.nix
rm -f package.json *.tgz

popd