mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-05 05:13:04 +00:00
105 lines
3.4 KiB
Nix
105 lines
3.4 KiB
Nix
{ lib
|
|
, buildNpmPackage
|
|
, stdenv
|
|
, fetchYarnDeps
|
|
, yarnConfigHook
|
|
, fetchFromGitHub
|
|
, typescript
|
|
, jq
|
|
, fetchpatch
|
|
}:
|
|
let
|
|
# Instead of the build script that spectral-language-server provides (ref: https://github.com/luizcorreia/spectral-language-server/blob/master/script/vscode-spectral-build.sh), we build vscode-spectral manually.
|
|
# This is because the script must go through the network and will not work under the Nix sandbox environment.
|
|
vscodeSpectral = stdenv.mkDerivation (finalAttrs: {
|
|
pname = "vscode-spectral";
|
|
version = "1.1.2";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "stoplightio";
|
|
repo = "vscode-spectral";
|
|
rev = "v${finalAttrs.version}";
|
|
hash = "sha256-TWy+bC6qhTKDY874ORTBbvCIH8ycpmBiU8GLYxBIiAs=";
|
|
};
|
|
|
|
offlineCache = fetchYarnDeps {
|
|
yarnLock = finalAttrs.src + "/yarn.lock";
|
|
hash = "sha256-am27A9VyFoXuOlgG9mnvNqV3Q7Bi7GJzDqqVFGDVWIA=";
|
|
};
|
|
|
|
nativeBuildInputs = [ typescript jq yarnConfigHook ];
|
|
|
|
postPatch = ''
|
|
cp server/tsconfig.json server/tsconfig.json.bak
|
|
jq '.compilerOptions += {"module": "NodeNext", "moduleResolution": "NodeNext"}' server/tsconfig.json.bak > server/tsconfig.json
|
|
'';
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
# FIXME: vscode-spactral depends on @rollup/pluginutils, but it may have a bug that doesn't provide the type definitions for NodeNext module resolution. (ref: https://github.com/rollup/plugins/issues/1192)
|
|
# tsc detects some type errors in the code. However we ignore this because it's not a problem for the final build if server/dist is generated.
|
|
tsc -p server || true
|
|
test -d server/dist
|
|
runHook postBuild
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
mkdir -p $out
|
|
cp -R server/dist $out
|
|
runHook postInstall
|
|
'';
|
|
|
|
meta = with lib; {
|
|
homepage = "https://github.com/stoplightio/vscode-spectral";
|
|
description = "VS Code extension bringing the awesome Spectral JSON/YAML linter with OpenAPI/AsyncAPI support";
|
|
license = licenses.asl20;
|
|
};
|
|
});
|
|
in
|
|
buildNpmPackage rec {
|
|
pname = "spectral-language-server";
|
|
version = "1.0.8-unstable-2023-06-06";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "luizcorreia";
|
|
repo = "spectral-language-server";
|
|
rev = "c9a7752b08e6bba937ef4f5435902afd41b6957f";
|
|
hash = "sha256-VD2aAzlCnJ6mxPUSbNRfMOlslM8kLPqrAI2ah6sX9cU=";
|
|
};
|
|
|
|
npmDepsHash = "sha256-ixAXy/rRkyWL3jdAkrXJh1qhWcKIkr5nH/Bhu2JV6k8=";
|
|
|
|
patches = [
|
|
# https://github.com/luizcorreia/spectral-language-server/pull/15
|
|
(fetchpatch {
|
|
name = "fix-package-lock.patch";
|
|
url = "https://github.com/luizcorreia/spectral-language-server/commit/909704850dd10e7b328fc7d15f8b07cdef88899d.patch";
|
|
hash = "sha256-+mN93xP4HCll4dTcnh2W/m9k3XovvgnB6AOmuJpZUZ0=";
|
|
})
|
|
];
|
|
|
|
dontNpmBuild = true;
|
|
|
|
npmFlags = [ "--ignore-scripts" ];
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
mkdir -p $out/bin
|
|
mkdir -p $out/node_modules
|
|
mkdir -p $out/dist/spectral-language-server
|
|
cp -R ${vscodeSpectral}/dist/* $out/dist/spectral-language-server/
|
|
cp ./bin/* $out/bin
|
|
cp -R ./node_modules/* $out/node_modules
|
|
runHook postInstall
|
|
'';
|
|
|
|
meta = with lib; {
|
|
homepage = "https://github.com/luizcorreia/spectral-language-server";
|
|
description = "Awesome Spectral JSON/YAML linter with OpenAPI/AsyncAPI support";
|
|
maintainers = with maintainers; [ momeemt ];
|
|
license = licenses.mit;
|
|
mainProgram = "spectral-language-server";
|
|
};
|
|
}
|