push sheeet
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s

This commit is contained in:
Dark Steveneq
2025-10-09 14:15:47 +02:00
commit 646b892680
49168 changed files with 5897842 additions and 0 deletions

View File

@@ -0,0 +1 @@
Moved to [/doc/languages-frameworks/javascript.section.md](/doc/languages-frameworks/javascript.section.md)

View File

@@ -0,0 +1,306 @@
pkgs: lib: self: super:
### Deprecated aliases - for backward compatibility
###
### !!! NOTE !!!
### Use `./remove-attr.py [attrname]` in this directory to remove your alias
### from the `nodePackages` set without regenerating the entire file.
let
# Removing recurseForDerivation prevents derivations of aliased attribute
# set to appear while listing all the packages available.
removeRecurseForDerivations =
alias:
if alias.recurseForDerivations or false then
lib.removeAttrs alias [ "recurseForDerivations" ]
else
alias;
# Disabling distribution prevents top-level aliases for non-recursed package
# sets from building on Hydra.
removeDistribute = alias: if lib.isDerivation alias then lib.dontDistribute alias else alias;
# Make sure that we are not shadowing something from node-packages.nix.
checkInPkgs =
n: alias:
if builtins.hasAttr n super then throw "Alias ${n} is still in node-packages.nix" else alias;
mapAliases =
aliases:
lib.mapAttrs (
n: alias: removeDistribute (removeRecurseForDerivations (checkInPkgs n alias))
) aliases;
in
mapAliases {
"@antora/cli" = pkgs.antora; # Added 2023-05-06
"@astrojs/language-server" = pkgs.astro-language-server; # Added 2024-02-12
"@bitwarden/cli" = pkgs.bitwarden-cli; # added 2023-07-25
"@commitlint/config-conventional" =
throw "@commitlint/config-conventional has been dropped, as it is a library and your JS project should lock it instead."; # added 2024-12-16
"@emacs-eask/cli" = pkgs.eask; # added 2023-08-17
"@forge/cli" = throw "@forge/cli was removed because it was broken"; # added 2023-09-20
"@google/clasp" = pkgs.google-clasp; # Added 2023-05-07
"@maizzle/cli" = pkgs.maizzle; # added 2023-08-17
"@medable/mdctl-cli" = throw "@medable/mdctl-cli was removed because it was broken"; # added 2023-08-21
"@mermaid-js/mermaid-cli" = pkgs.mermaid-cli; # added 2023-10-01
"@nerdwallet/shepherd" = pkgs.shepherd; # added 2023-09-30
"@nestjs/cli" = pkgs.nest-cli; # Added 2023-05-06
"@prisma/language-server" = throw "@prisma/language-server has been removed because it was broken"; # added 2025-03-23
"@shopify/cli" = throw "@shopify/cli has been removed because it was broken"; # added 2025-03-12
"@tailwindcss/language-server" = pkgs.tailwindcss-language-server; # added 2024-01-22
"@volar/vue-language-server" = pkgs.vue-language-server; # added 2024-06-15
"@vue/language-server" = pkgs.vue-language-server; # added 2024-06-15
"@withgraphite/graphite-cli" = pkgs.graphite-cli; # added 2024-01-25
"@zwave-js/server" = pkgs.zwave-js-server; # Added 2023-09-09
antennas = pkgs.antennas; # added 2023-07-30
inherit (pkgs) autoprefixer; # added 2024-06-25
inherit (pkgs) asar; # added 2023-08-26
inherit (pkgs) auto-changelog; # added 2024-06-25
inherit (pkgs) aws-azure-login; # added 2023-09-30
balanceofsatoshis = pkgs.balanceofsatoshis; # added 2023-07-31
inherit (pkgs) bash-language-server; # added 2024-06-07
bibtex-tidy = pkgs.bibtex-tidy; # added 2023-07-30
bitwarden-cli = pkgs.bitwarden-cli; # added 2023-07-25
bower = throw "bower was removed because it was deprecated"; # added 2025-09-17
inherit (pkgs) bower2nix; # added 2024-08-23
inherit (pkgs) btc-rpc-explorer; # added 2023-08-17
inherit (pkgs) carbon-now-cli; # added 2023-08-17
inherit (pkgs) carto; # added 2023-08-17
castnow = pkgs.castnow; # added 2023-07-30
inherit (pkgs) cdktf-cli; # added 2025-10-02
inherit (pkgs) clean-css-cli; # added 2023-08-18
inherit (pkgs) clubhouse-cli; # added 2023-08-18
inherit (pkgs) coc-clangd; # added 2024-06-29
inherit (pkgs) coc-css; # added 2024-06-29
inherit (pkgs) coc-diagnostic; # added 2024-06-29
inherit (pkgs) coc-docker; # added 2025-10-01
inherit (pkgs) coc-explorer; # added 2025-10-01
inherit (pkgs) coc-git; # added 2025-10-01
coc-imselect = throw "coc-imselect was removed because it was broken"; # added 2023-08-21
inherit (pkgs) coc-pyright; # added 2024-07-14
coc-metals = throw "coc-metals was removed because it was deprecated upstream. vimPlugins.nvim-metals is its official replacement."; # Added 2024-10-16
coc-python = throw "coc-python was removed because it was abandoned upstream on 2020-12-24. Upstream now recommends using coc-pyright or coc-jedi instead."; # added 2024-10-15
coc-rls = throw "coc-rls was removed because rls was deprecated in 2022. You should use coc-rust-analyzer instead, as rust-analyzer is maintained."; # added 2025-10-01
inherit (pkgs) coc-sh; # added 2025-10-02
inherit (pkgs) coc-spell-checker; # added 2025-10-01
inherit (pkgs) coc-toml;
coc-tslint = throw "coc-tslint was removed because it was deprecated upstream; coc-eslint offers comparable features for eslint, which replaced tslint"; # Added 2024-10-18
coc-tslint-plugin = throw "coc-tslint-plugin was removed because it was deprecated upstream; coc-eslint offers comparable features for eslint, which replaced tslint"; # Added 2024-10-18
coc-vetur = throw "coc-vetur was removed because vetur was deprecated by Vue in favor of volar. Use coc-volar instead, which supports Vue 3"; # added 2025-10-01
coinmon = throw "coinmon was removed since it was abandoned upstream"; # added 2024-03-19
coffee-script = pkgs.coffeescript; # added 2023-08-18
inherit (pkgs) concurrently; # added 2024-08-05
inherit (pkgs) configurable-http-proxy; # added 2023-08-19
copy-webpack-plugin = throw "copy-webpack-plugin was removed because it is a JS library, so your project should lock it with a JS package manager instead."; # Added 2024-12-16
inherit (pkgs) cordova; # added 2023-08-18
inherit (pkgs) create-react-app; # added 2023-09-25
create-react-native-app = throw "create-react-native-app was removed because it was deprecated. Upstream suggests using a framework for React Native."; # added 2024-12-08
inherit (pkgs) cspell;
dat = throw "dat was removed because it was broken"; # added 2023-08-21
inherit (pkgs) degit; # added 2023-08-18
inherit (pkgs) diagnostic-languageserver; # added 2024-06-25
inherit (pkgs) dockerfile-language-server-nodejs; # added 2023-08-18
inherit (pkgs) dotenv-cli; # added 2024-06-26
eask = pkgs.eask; # added 2023-08-17
inherit (pkgs.elmPackages) elm-test;
inherit (pkgs.elmPackages) elm-review;
escape-string-regexp = throw "escape-string-regexp was removed because it provides no executable"; # added 2025-03-12
inherit (pkgs) eslint; # Added 2024-08-28
inherit (pkgs) eslint_d; # Added 2023-05-26
inherit (pkgs) eas-cli; # added 2025-01-08
expo-cli = throw "expo-cli was removed because it was deprecated upstream. Use `npx expo` or eas-cli instead."; # added 2024-12-02
inherit (pkgs) firebase-tools; # added 2023-08-18
inherit (pkgs) fixjson; # added 2024-06-26
flood = pkgs.flood; # Added 2023-07-25
ganache = throw "ganache was removed because it was deprecated upstream"; # added 2024-12-02
generator-code = throw "generator-code was removed because it provides no executable"; # added 2023-09-24
inherit (pkgs) git-run; # added 2024-06-26
git-ssb = throw "git-ssb was removed because it was broken"; # added 2023-08-21
inherit (pkgs) git-standup; # added 2024-06-26
inherit (pkgs) gitmoji-cli; # added 2023-09-23
glob = pkgs.node-glob; # added 2023-08-18
inherit (pkgs) get-graphql-schema; # added 2024-06-26
inherit (pkgs) gqlint; # added 2023-08-19
inherit (pkgs) gramma; # added 2024-06-26
grammarly-languageserver = throw "grammarly-languageserver was removed because it requires EOL Node.js 16"; # added 2024-07-15
inherit (pkgs) graphite-cli; # added 2024-01-25
inherit (pkgs) graphql-language-service-cli; # added 2025-03-17
inherit (pkgs) graphqurl; # added 2023-08-19
gtop = pkgs.gtop; # added 2023-07-31
hs-client = pkgs.hsd; # added 2023-08-20
inherit (pkgs) hsd; # added 2023-08-19
inherit (pkgs) html-minifier; # added 2023-08-19
inherit (pkgs) htmlhint; # added 2023-08-19
inherit (pkgs) http-server; # added 2024-01-20
hueadm = pkgs.hueadm; # added 2023-07-31
inherit (pkgs) hyperpotamus; # added 2023-08-19
ijavascript = throw "ijavascript has been removed because it was broken"; # added 2025-03-18
immich = pkgs.immich-cli; # added 2023-08-19
indium = throw "indium was removed because it was broken"; # added 2023-08-19
inliner = throw "inliner was removed because it was abandoned upstream"; # added 2024-08-23
inherit (pkgs) intelephense; # added 2024-08-31
insect = throw "insect was removed becuase it was deprecated by upstream. Use numbat instead."; # added 2024-12-02
ionic = throw "ionic was replaced by @ionic/cli"; # added 2023-08-19
inherit (pkgs) jake; # added 2023-08-19
inherit (pkgs) javascript-typescript-langserver; # added 2023-08-19
inherit (pkgs) kaput-cli; # added 2024-12-03
karma = pkgs.karma-runner; # added 2023-07-29
leetcode-cli = self.vsc-leetcode-cli; # added 2023-08-31
inherit (pkgs) lerna; # added 2025-02-12
less = pkgs.lessc; # added 2024-06-15
less-plugin-clean-css = pkgs.lessc.plugins.clean-css; # added 2024-06-15
lodash = throw "lodash was removed because it provides no executable"; # added 2025-03-18
inherit (pkgs) lv_font_conv; # added 2024-06-28
manta = pkgs.node-manta; # Added 2023-05-06
inherit (pkgs) markdown-link-check; # added 2024-06-28
markdownlint-cli = pkgs.markdownlint-cli; # added 2023-07-29
inherit (pkgs) markdownlint-cli2; # added 2023-08-22
inherit (pkgs) mathjax-node-cli; # added 2023-11-02
mdctl-cli = self."@medable/mdctl-cli"; # added 2023-08-21
inherit (pkgs) mermaid-cli; # added 2023-10-01
meshcommander = throw "meshcommander was removed because it was abandoned upstream"; # added 2024-12-02
musescore-downloader = pkgs.dl-librescore; # added 2023-08-19
inherit (pkgs) near-cli; # added 2023-09-09
neovim = pkgs.neovim-node-client; # added 2024-11-13
node-inspector = throw "node-inspector was removed because it was broken"; # added 2023-08-21
inherit (pkgs) node-gyp; # added 2024-08-13
inherit (pkgs) node-pre-gyp; # added 2024-08-05
inherit (pkgs) node-red; # added 2024-10-06
inherit (pkgs) nodemon; # added 2024-06-28
npm = pkgs.nodejs.overrideAttrs (old: {
meta = old.meta // {
mainProgram = "npm";
};
}); # added 2024-10-04
inherit (pkgs) npm-check-updates; # added 2023-08-22
ocaml-language-server = throw "ocaml-language-server was removed because it was abandoned upstream"; # added 2023-09-04
orval = throw "orval has been removed because it was broken"; # added 2025-03-23
parcel = throw "parcel has been removed because it was broken"; # added 2025-03-12
parcel-bundler = self.parcel; # added 2023-09-04
inherit (pkgs) patch-package; # added 2024-06-29
pkg = pkgs.vercel-pkg; # added 2023-10-04
inherit (pkgs) pm2; # added 2024-01-22
inherit (pkgs) pnpm; # added 2024-06-26
postcss-cli = throw "postcss-cli has been removed because it was broken"; # added 2025-03-24
inherit (pkgs) prettier; # added 2025-05-31
prettier_d_slim = pkgs.prettier-d-slim; # added 2023-09-14
prettier-plugin-toml = throw "prettier-plugin-toml was removed because it provides no executable"; # added 2025-03-23
inherit (pkgs) prisma; # added 2024-08-31
inherit (pkgs) pxder; # added 2023-09-26
inherit (pkgs) quicktype; # added 2023-09-09
react-native-cli = throw "react-native-cli was removed because it was deprecated"; # added 2023-09-25
inherit (pkgs) react-static; # added 2023-08-21
react-tools = throw "react-tools was removed because it was deprecated"; # added 2023-09-25
readability-cli = pkgs.readability-cli; # Added 2023-06-12
inherit (pkgs) redoc-cli; # added 2023-09-12
remod-cli = pkgs.remod; # added 2024-12-04
"reveal.js" = throw "reveal.js was removed because it provides no executable"; # added 2025-03-23
reveal-md = pkgs.reveal-md; # added 2023-07-31
rimraf = throw "rimraf was removed because it is a library, and your project should lock it instead."; # added 2025-05-28
rollup = throw "rollup has been removed because it was broken"; # added 2025-04-28
inherit (pkgs) rtlcss; # added 2023-08-29
s3http = throw "s3http was removed because it was abandoned upstream"; # added 2023-08-18
inherit (pkgs) serve; # added 2025-08-27
inherit (pkgs) serverless; # Added 2023-11-29
shout = throw "shout was removed because it was deprecated upstream in favor of thelounge."; # Added 2024-10-19
inherit (pkgs) snyk; # Added 2023-08-30
"socket.io" = throw "socket.io was removed because it provides no executable"; # added 2025-03-23
inherit (pkgs) sql-formatter; # added 2024-06-29
"@squoosh/cli" = throw "@squoosh/cli was removed because it was abandoned upstream"; # added 2023-09-02
ssb-server = throw "ssb-server was removed because it was broken"; # added 2023-08-21
stackdriver-statsd-backend = throw "stackdriver-statsd-backend was removed because Stackdriver is now discontinued"; # added 2024-12-02
stf = throw "stf was removed because it was broken"; # added 2023-08-21
inherit (pkgs) stylelint; # added 2023-09-13
surge = pkgs.surge-cli; # Added 2023-09-08
inherit (pkgs) svelte-language-server; # Added 2024-05-12
inherit (pkgs) svgo; # added 2025-08-24
swagger = throw "swagger was removed because it was broken and abandoned upstream"; # added 2023-09-09
inherit (pkgs) tailwindcss; # added 2024-12-04
teck-programmer = throw "teck-programmer was removed because it was broken and unmaintained"; # added 2024-08-23
tedicross = throw "tedicross was removed because it was broken"; # added 2023-09-09
inherit (pkgs) terser; # Added 2023-08-31
inherit (pkgs) textlint; # Added 2024-05-13
textlint-plugin-latex = throw "textlint-plugin-latex was removed because it is unmaintained for years. Please use textlint-plugin-latex2e instead."; # Added 2024-05-17
inherit (pkgs) textlint-rule-abbr-within-parentheses; # Added 2024-05-17
inherit (pkgs) textlint-rule-alex; # Added 2024-05-16
inherit (pkgs) textlint-rule-common-misspellings; # Added 2024-05-25
inherit (pkgs) textlint-rule-diacritics; # Added 2024-05-16
inherit (pkgs) textlint-rule-en-max-word-count; # Added 2024-05-17
inherit (pkgs) textlint-rule-max-comma; # Added 2024-05-15
inherit (pkgs) textlint-rule-no-start-duplicated-conjunction; # Added 2024-05-17
inherit (pkgs) textlint-rule-period-in-list-item; # Added 2024-05-17
inherit (pkgs) textlint-rule-stop-words; # Added 2024-05-17
inherit (pkgs) textlint-rule-terminology; # Added 2024-05-17
inherit (pkgs) textlint-rule-unexpanded-acronym; # Added 2024-05-17
inherit (pkgs) textlint-rule-write-good; # Added 2024-05-16
thelounge = pkgs.thelounge; # Added 2023-05-22
thelounge-plugin-closepms = throw "thelounge-plugin-closepms has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-plugin-giphy = throw "thelounge-plugin-giphy has been removed because thelounge moved out of nodePackages"; # added 2025-03-12
thelounge-plugin-shortcuts = throw "thelounge-plugin-shortcuts has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-abyss = throw "thelounge-theme-abyss has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-amoled = throw "thelounge-theme-amoled has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-amoled-sourcecodepro = throw "thelounge-theme-amoled-sourcecodepro has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-bdefault = throw "thelounge-theme-bdefault has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-bmorning = throw "thelounge-theme-bmorning has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-chord = throw "thelounge-theme-chord has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-classic = throw "thelounge-theme-classic has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-common = throw "thelounge-theme-common has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-crypto = throw "thelounge-theme-crypto has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-discordapp = throw "thelounge-theme-discordapp has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-dracula = throw "thelounge-theme-dracula has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-dracula-official = throw "thelounge-theme-dracula-official has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-flat-blue = throw "thelounge-theme-flat-blue has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-flat-dark = throw "thelounge-theme-flat-dark has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-gruvbox = throw "thelounge-theme-gruvbox has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-hexified = throw "thelounge-theme-hexified has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-ion = throw "thelounge-theme-ion has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-light = throw "thelounge-theme-light has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-midnight = throw "thelounge-theme-midnight has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-mininapse = throw "thelounge-theme-mininapse has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-monokai-console = throw "thelounge-theme-monokai-console has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-mortified = throw "thelounge-theme-mortified has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-neuron-fork = throw "thelounge-theme-neuron-fork has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-new-morning = throw "thelounge-theme-new-morning has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-new-morning-compact = throw "thelounge-theme-new-morning-compact has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-nologo = throw "thelounge-theme-nologo has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-nord = throw "thelounge-theme-nord has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-onedark = throw "thelounge-theme-onedark has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-purplenight = throw "thelounge-theme-purplenight has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-scoutlink = throw "thelounge-theme-scoutlink has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-seraphimrp = throw "thelounge-theme-seraphimrp has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-solarized = throw "thelounge-theme-solarized has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-solarized-fork-monospace = throw "thelounge-theme-solarized-fork-monospace has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-zenburn = throw "thelounge-theme-zenburn has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-zenburn-monospace = throw "thelounge-theme-zenburn-monospace has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-zenburn-sourcecodepro = throw "thelounge-theme-zenburn-sourcecodepro has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
three = throw "three was removed because it was no longer needed"; # Added 2023-09-08
triton = pkgs.triton; # Added 2023-05-06
typescript = pkgs.typescript; # Added 2023-06-21
inherit (pkgs) typescript-language-server; # added 2024-02-27
inherit (pkgs) uglify-js; # added 2024-06-15
inherit (pkgs) undollar; # added 2024-06-29
inherit (pkgs) ungit; # added 2023-08-20
unified-language-server = throw "unified-language-server was removed as it is a library that should be imported within a Javascript project, not an end-user tool"; # added 2025-10-02
inherit (pkgs) vim-language-server; # added 2024-06-25
vls = throw "vls has been deprecated by upstream as vetur is also deprecated. Upstream suggests migrating to Volar for Vue LSP tooling instead."; # added 2024-12-09
inherit (pkgs) vsc-leetcode-cli; # Added 2023-08-30
vscode-css-languageserver-bin = throw "vscode-css-languageserver-bin has been removed since the upstream repository is archived; consider using vscode-langservers-extracted instead."; # added 2024-06-26
vscode-html-languageserver-bin = throw "vscode-html-languageserver-bin has been removed since the upstream repository is archived; consider using vscode-langservers-extracted instead."; # added 2024-06-26
inherit (pkgs) vscode-json-languageserver; # added 2025-06-19
vscode-json-languageserver-bin = throw "vscode-json-languageserver-bin has been removed since the upstream repository is archived; consider using vscode-langservers-extracted instead."; # added 2024-06-26
vscode-langservers-extracted = pkgs.vscode-langservers-extracted; # Added 2023-05-27
vue-language-server = self.vls; # added 2023-08-20
vue-cli = throw "vue-cli has been removed since upstream no longer recommends using it; consider using create-vue and the new Vite-based tooling instead."; # added 2024-07-12
inherit (pkgs) web-ext; # added 2023-08-20
inherit (pkgs) webpack-cli; # added 2024-12-03
webpack-dev-server = throw "webpack-dev-server has been removed. You should install it in your JS project instead."; # added 2024-12-05
webtorrent-cli = throw "webtorrent-cli has been removed because it was broken"; # added 2025-03-12
inherit (pkgs) wrangler; # added 2024-07-01
inherit (pkgs) write-good; # added 2023-08-20
inherit (pkgs) yalc; # added 2024-06-29
inherit (pkgs) yaml-language-server; # added 2023-09-05
inherit (pkgs) yarn; # added 2024-08-13
inherit (pkgs) yo; # added 2023-08-20
zx = pkgs.zx; # added 2023-08-01
}

View File

@@ -0,0 +1,33 @@
# This file has been generated by node2nix 1.11.1. Do not edit!
{
pkgs ? import <nixpkgs> {
inherit system;
},
system ? builtins.currentSystem,
nodejs ? pkgs."nodejs_22",
}:
let
nodeEnv = import ./node-env.nix {
inherit (pkgs)
stdenv
lib
runCommand
writeTextFile
writeShellScript
;
inherit pkgs nodejs;
libtool = if pkgs.stdenv.hostPlatform.isDarwin then pkgs.cctools or pkgs.darwin.cctools else null;
};
in
import ./node-packages.nix {
inherit (pkgs)
fetchurl
nix-gitignore
stdenv
lib
fetchgit
;
inherit nodeEnv;
}

View File

@@ -0,0 +1,44 @@
{
config,
pkgs,
lib,
nodejs,
stdenv,
}:
let
inherit (lib)
composeManyExtensions
extends
makeExtensible
mapAttrs
;
nodePackages =
final:
import ./composition.nix {
inherit pkgs nodejs;
inherit (stdenv.hostPlatform) system;
};
mainProgramOverrides =
final: prev:
mapAttrs (
pkgName: mainProgram:
prev.${pkgName}.override (oldAttrs: {
meta = oldAttrs.meta // {
inherit mainProgram;
};
})
) (import ./main-programs.nix);
aliases =
final: prev: lib.optionalAttrs config.allowAliases (import ./aliases.nix pkgs lib final prev);
extensions = composeManyExtensions [
aliases
mainProgramOverrides
(import ./overrides.nix { inherit pkgs nodejs; })
];
in
makeExtensible (extends extensions nodePackages)

View File

@@ -0,0 +1,23 @@
#!/usr/bin/env bash
set -eu -o pipefail
cd "$( dirname "${BASH_SOURCE[0]}" )"
node2nix=$(nix-build ../../.. -A nodePackages.node2nix)
rm -f ./node-env.nix
# Track the latest active nodejs LTS here: https://nodejs.org/en/about/releases/
"${node2nix}/bin/node2nix" \
-i node-packages.json \
-o node-packages.nix \
-c composition.nix \
--pkg-name nodejs_22
# using --no-out-link in nix-build argument would cause the
# gc to run before the script finishes
# which would cause a failure
# it's safer to just remove the link after the script finishes
# see https://github.com/NixOS/nixpkgs/issues/112846 for more details
rm ./result

View File

@@ -0,0 +1,42 @@
# Use this file to add `meta.mainProgram` to packages in `nodePackages`.
{
# Packages that provide multiple executables where one is clearly the `mainProgram`.
"@antfu/ni" = "ni";
"@electron-forge/cli" = "electron-forge";
"@microsoft/rush" = "rush";
"@webassemblyjs/cli-1.11.1" = "wasm2wast";
# Packages that provide a single executable.
"@angular/cli" = "ng";
"@babel/cli" = "babel";
"@commitlint/cli" = "commitlint";
"@gitbeaker/cli" = "gitbeaker";
"@uppy/companion" = "companion";
"@webassemblyjs/repl-1.11.1" = "wasm";
"@webassemblyjs/wasm-strip" = "wasm-strip";
"@webassemblyjs/wasm-text-gen-1.11.1" = "wasmgen";
"@webassemblyjs/wast-refmt-1.11.1" = "wast-refmt";
aws-cdk = "cdk";
cdk8s-cli = "cdk8s";
clipboard-cli = "clipboard";
conventional-changelog-cli = "conventional-changelog";
cpy-cli = "cpy";
diff2html-cli = "diff2html";
fast-cli = "fast";
fauna-shell = "fauna";
fkill-cli = "fkill";
fleek-cli = "fleek";
grunt-cli = "grunt";
gulp-cli = "gulp";
jsonlint = "jsonlint";
localtunnel = "lt";
lua-fmt = "luafmt";
parsoid = "parse.js";
poor-mans-t-sql-formatter-cli = "sqlformat";
pulp = "pulp";
purescript-language-server = "purescript-language-server";
purescript-psa = "psa";
purs-tidy = "purs-tidy";
purty = "purty";
pscid = "pscid";
}

View File

@@ -0,0 +1,797 @@
# This file originates from node2nix
{
lib,
stdenv,
nodejs,
pkgs,
libtool,
runCommand,
writeTextFile,
writeShellScript,
}:
let
inherit (nodejs) python;
# Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
tarWrapper = runCommand "tarWrapper" { } ''
mkdir -p $out/bin
cat > $out/bin/tar <<EOF
#! ${stdenv.shell} -e
$(type -p tar) "\$@" --warning=no-unknown-keyword --delay-directory-restore
EOF
chmod +x $out/bin/tar
'';
# Function that generates a TGZ file from a NPM project
buildNodeSourceDist =
{
name,
version,
src,
...
}:
stdenv.mkDerivation {
name = "node-tarball-${name}-${version}";
inherit src;
buildInputs = [ nodejs ];
buildPhase = ''
export HOME=$TMPDIR
tgzFile=$(npm pack | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts)
'';
installPhase = ''
mkdir -p $out/tarballs
mv $tgzFile $out/tarballs
mkdir -p $out/nix-support
echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products
'';
};
# Common shell logic
installPackage = writeShellScript "install-package" ''
installPackage() {
local packageName=$1 src=$2
local strippedName
local DIR=$PWD
cd $TMPDIR
unpackFile $src
# Make the base dir in which the target dependency resides first
mkdir -p "$(dirname "$DIR/$packageName")"
if [ -f "$src" ]
then
# Figure out what directory has been unpacked
packageDir="$(find . -maxdepth 1 -type d | tail -1)"
# Restore write permissions to make building work
find "$packageDir" -type d -exec chmod u+x {} \;
chmod -R u+w "$packageDir"
# Move the extracted tarball into the output folder
mv "$packageDir" "$DIR/$packageName"
elif [ -d "$src" ]
then
# Get a stripped name (without hash) of the source directory.
# On old nixpkgs it's already set internally.
if [ -z "$strippedName" ]
then
strippedName="$(stripHash $src)"
fi
# Restore write permissions to make building work
chmod -R u+w "$strippedName"
# Move the extracted directory into the output folder
mv "$strippedName" "$DIR/$packageName"
fi
# Change to the package directory to install dependencies
cd "$DIR/$packageName"
}
'';
# Bundle the dependencies of the package
#
# Only include dependencies if they don't exist. They may also be bundled in the package.
includeDependencies =
{ dependencies }:
lib.optionalString (dependencies != [ ]) (
''
mkdir -p node_modules
cd node_modules
''
+ (lib.concatMapStrings (dependency: ''
if [ ! -e "${dependency.packageName}" ]; then
${composePackage dependency}
fi
'') dependencies)
+ ''
cd ..
''
);
# Recursively composes the dependencies of a package
composePackage =
{
name,
packageName,
src,
dependencies ? [ ],
...
}@args:
builtins.addErrorContext "while evaluating node package '${packageName}'" ''
installPackage "${packageName}" "${src}"
${includeDependencies { inherit dependencies; }}
cd ..
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
'';
pinpointDependencies =
{ dependencies, production }:
let
pinpointDependenciesFromPackageJSON = writeTextFile {
name = "pinpointDependencies.js";
text = ''
var fs = require('fs');
var path = require('path');
function resolveDependencyVersion(location, name) {
if(location == process.env['NIX_STORE']) {
return null;
} else {
var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
if(fs.existsSync(dependencyPackageJSON)) {
var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
if(dependencyPackageObj.name == name) {
return dependencyPackageObj.version;
}
} else {
return resolveDependencyVersion(path.resolve(location, ".."), name);
}
}
}
function replaceDependencies(dependencies) {
if(typeof dependencies == "object" && dependencies !== null) {
for(var dependency in dependencies) {
var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
if(resolvedVersion === null) {
process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
} else {
dependencies[dependency] = resolvedVersion;
}
}
}
}
/* Read the package.json configuration */
var packageObj = JSON.parse(fs.readFileSync('./package.json'));
/* Pinpoint all dependencies */
replaceDependencies(packageObj.dependencies);
if(process.argv[2] == "development") {
replaceDependencies(packageObj.devDependencies);
}
else {
packageObj.devDependencies = {};
}
replaceDependencies(packageObj.optionalDependencies);
replaceDependencies(packageObj.peerDependencies);
/* Write the fixed package.json file */
fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
'';
};
in
''
node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"}
${lib.optionalString (dependencies != [ ]) ''
if [ -d node_modules ]
then
cd node_modules
${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies}
cd ..
fi
''}
'';
# Recursively traverses all dependencies of a package and pinpoints all
# dependencies in the package.json file to the versions that are actually
# being used.
pinpointDependenciesOfPackage =
{
packageName,
dependencies ? [ ],
production ? true,
...
}@args:
''
if [ -d "${packageName}" ]
then
cd "${packageName}"
${pinpointDependencies { inherit dependencies production; }}
cd ..
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
fi
'';
# Extract the Node.js source code which is used to compile packages with
# native bindings
nodeSources = runCommand "node-sources" { } ''
tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
mv node-* $out
'';
# Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty)
addIntegrityFieldsScript = writeTextFile {
name = "addintegrityfields.js";
text = ''
var fs = require('fs');
var path = require('path');
function augmentDependencies(baseDir, dependencies) {
for(var dependencyName in dependencies) {
var dependency = dependencies[dependencyName];
// Open package.json and augment metadata fields
var packageJSONDir = path.join(baseDir, "node_modules", dependencyName);
var packageJSONPath = path.join(packageJSONDir, "package.json");
if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored
console.log("Adding metadata fields to: "+packageJSONPath);
var packageObj = JSON.parse(fs.readFileSync(packageJSONPath));
if(dependency.integrity) {
packageObj["_integrity"] = dependency.integrity;
} else {
packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads.
}
if(dependency.resolved) {
packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided
} else {
packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
}
if(dependency.from !== undefined) { // Adopt from property if one has been provided
packageObj["_from"] = dependency.from;
}
fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2));
}
// Augment transitive dependencies
if(dependency.dependencies !== undefined) {
augmentDependencies(packageJSONDir, dependency.dependencies);
}
}
}
if(fs.existsSync("./package-lock.json")) {
var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
if(![1, 2].includes(packageLock.lockfileVersion)) {
process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n");
process.exit(1);
}
if(packageLock.dependencies !== undefined) {
augmentDependencies(".", packageLock.dependencies);
}
}
'';
};
# Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
reconstructPackageLock = writeTextFile {
name = "reconstructpackagelock.js";
text = ''
var fs = require('fs');
var path = require('path');
var packageObj = JSON.parse(fs.readFileSync("package.json"));
var lockObj = {
name: packageObj.name,
version: packageObj.version,
lockfileVersion: 2,
requires: true,
packages: {
"": {
name: packageObj.name,
version: packageObj.version,
license: packageObj.license,
bin: packageObj.bin,
dependencies: packageObj.dependencies,
engines: packageObj.engines,
optionalDependencies: packageObj.optionalDependencies
}
},
dependencies: {}
};
function augmentPackageJSON(filePath, packages, dependencies) {
var packageJSON = path.join(filePath, "package.json");
if(fs.existsSync(packageJSON)) {
var packageObj = JSON.parse(fs.readFileSync(packageJSON));
packages[filePath] = {
version: packageObj.version,
integrity: "sha1-000000000000000000000000000=",
dependencies: packageObj.dependencies,
engines: packageObj.engines,
optionalDependencies: packageObj.optionalDependencies
};
dependencies[packageObj.name] = {
version: packageObj.version,
integrity: "sha1-000000000000000000000000000=",
dependencies: {}
};
processDependencies(path.join(filePath, "node_modules"), packages, dependencies[packageObj.name].dependencies);
}
}
function processDependencies(dir, packages, dependencies) {
if(fs.existsSync(dir)) {
var files = fs.readdirSync(dir);
files.forEach(function(entry) {
var filePath = path.join(dir, entry);
var stats = fs.statSync(filePath);
if(stats.isDirectory()) {
if(entry.substr(0, 1) == "@") {
// When we encounter a namespace folder, augment all packages belonging to the scope
var pkgFiles = fs.readdirSync(filePath);
pkgFiles.forEach(function(entry) {
if(stats.isDirectory()) {
var pkgFilePath = path.join(filePath, entry);
augmentPackageJSON(pkgFilePath, packages, dependencies);
}
});
} else {
augmentPackageJSON(filePath, packages, dependencies);
}
}
});
}
}
processDependencies("node_modules", lockObj.packages, lockObj.dependencies);
fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
'';
};
# Script that links bins defined in package.json to the node_modules bin directory
# NPM does not do this for top-level packages itself anymore as of v7
linkBinsScript = writeTextFile {
name = "linkbins.js";
text = ''
var fs = require('fs');
var path = require('path');
var packageObj = JSON.parse(fs.readFileSync("package.json"));
var nodeModules = Array(packageObj.name.split("/").length).fill("..").join(path.sep);
if(packageObj.bin !== undefined) {
fs.mkdirSync(path.join(nodeModules, ".bin"))
if(typeof packageObj.bin == "object") {
Object.keys(packageObj.bin).forEach(function(exe) {
if(fs.existsSync(packageObj.bin[exe])) {
console.log("linking bin '" + exe + "'");
fs.symlinkSync(
path.join("..", packageObj.name, packageObj.bin[exe]),
path.join(nodeModules, ".bin", exe)
);
}
else {
console.log("skipping non-existent bin '" + exe + "'");
}
})
}
else {
if(fs.existsSync(packageObj.bin)) {
console.log("linking bin '" + packageObj.bin + "'");
fs.symlinkSync(
path.join("..", packageObj.name, packageObj.bin),
path.join(nodeModules, ".bin", packageObj.name.split("/").pop())
);
}
else {
console.log("skipping non-existent bin '" + packageObj.bin + "'");
}
}
}
else if(packageObj.directories !== undefined && packageObj.directories.bin !== undefined) {
fs.mkdirSync(path.join(nodeModules, ".bin"))
fs.readdirSync(packageObj.directories.bin).forEach(function(exe) {
if(fs.existsSync(path.join(packageObj.directories.bin, exe))) {
console.log("linking bin '" + exe + "'");
fs.symlinkSync(
path.join("..", packageObj.name, packageObj.directories.bin, exe),
path.join(nodeModules, ".bin", exe)
);
}
else {
console.log("skipping non-existent bin '" + exe + "'");
}
})
}
'';
};
prepareAndInvokeNPM =
{
packageName,
bypassCache,
reconstructLock,
npmFlags,
production,
}:
let
forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
in
''
# Pinpoint the versions of all dependencies to the ones that are actually being used
echo "pinpointing versions of dependencies..."
source $pinpointDependenciesScriptPath
# Patch the shebangs of the bundled modules to prevent them from
# calling executables outside the Nix store as much as possible
patchShebangs .
# Deploy the Node.js package by running npm install. Since the
# dependencies have been provided already by ourselves, it should not
# attempt to install them again, which is good, because we want to make
# it Nix's responsibility. If it needs to install any dependencies
# anyway (e.g. because the dependency parameters are
# incomplete/incorrect), it fails.
#
# The other responsibilities of NPM are kept -- version checks, build
# steps, postprocessing etc.
export HOME=$TMPDIR
cd "${packageName}"
runHook preRebuild
${lib.optionalString bypassCache ''
${lib.optionalString reconstructLock ''
if [ -f package-lock.json ]
then
echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!"
echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!"
rm package-lock.json
else
echo "No package-lock.json file found, reconstructing..."
fi
node ${reconstructPackageLock}
''}
node ${addIntegrityFieldsScript}
''}
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
runHook postRebuild
if [ "''${dontNpmInstall-}" != "1" ]
then
# NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
rm -f npm-shrinkwrap.json
npm ${forceOfflineFlag} --nodedir=${nodeSources} --no-bin-links --ignore-scripts ${npmFlags} ${lib.optionalString production "--production"} install
fi
# Link executables defined in package.json
node ${linkBinsScript}
'';
# Builds and composes an NPM package including all its dependencies
buildNodePackage =
{
name,
packageName,
version ? null,
dependencies ? [ ],
buildInputs ? [ ],
production ? true,
npmFlags ? "",
dontNpmInstall ? false,
bypassCache ? false,
reconstructLock ? false,
preRebuild ? "",
dontStrip ? true,
unpackPhase ? "true",
buildPhase ? "true",
meta ? { },
...
}@args:
let
extraArgs = removeAttrs args [
"name"
"dependencies"
"buildInputs"
"dontStrip"
"dontNpmInstall"
"preRebuild"
"unpackPhase"
"buildPhase"
"meta"
];
in
stdenv.mkDerivation (
{
name = "${name}${if version == null then "" else "-${version}"}";
buildInputs = [
tarWrapper
python
nodejs
]
++ lib.optional (stdenv.hostPlatform.isLinux) pkgs.util-linux
++ lib.optional (stdenv.hostPlatform.isDarwin) libtool
++ buildInputs;
inherit nodejs;
inherit dontStrip; # Stripping may fail a build for some package deployments
inherit
dontNpmInstall
preRebuild
unpackPhase
buildPhase
;
compositionScript = composePackage args;
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
passAsFile = [
"compositionScript"
"pinpointDependenciesScript"
];
installPhase = ''
source ${installPackage}
# Create and enter a root node_modules/ folder
mkdir -p $out/lib/node_modules
cd $out/lib/node_modules
# Compose the package and all its dependencies
source $compositionScriptPath
${prepareAndInvokeNPM {
inherit
packageName
bypassCache
reconstructLock
npmFlags
production
;
}}
# Create symlink to the deployed executable folder, if applicable
if [ -d "$out/lib/node_modules/.bin" ]
then
ln -s $out/lib/node_modules/.bin $out/bin
# Fixup all executables
ls $out/bin/* | while read i
do
file="$(readlink -f "$i")"
chmod u+rwx "$file"
if isScript "$file"
then
sed -i 's/\r$//' "$file" # convert crlf to lf
fi
done
fi
# Create symlinks to the deployed manual page folders, if applicable
if [ -d "$out/lib/node_modules/${packageName}/man" ]
then
mkdir -p $out/share
for dir in "$out/lib/node_modules/${packageName}/man/"*
do
mkdir -p $out/share/man/$(basename "$dir")
for page in "$dir"/*
do
ln -s $page $out/share/man/$(basename "$dir")
done
done
fi
# Run post install hook, if provided
runHook postInstall
'';
meta = {
# default to Node.js' platforms
platforms = nodejs.meta.platforms;
}
// meta;
}
// extraArgs
);
# Builds a node environment (a node_modules folder and a set of binaries)
buildNodeDependencies =
{
name,
packageName,
version ? null,
src,
dependencies ? [ ],
buildInputs ? [ ],
production ? true,
npmFlags ? "",
dontNpmInstall ? false,
bypassCache ? false,
reconstructLock ? false,
dontStrip ? true,
unpackPhase ? "true",
buildPhase ? "true",
...
}@args:
let
extraArgs = removeAttrs args [
"name"
"dependencies"
"buildInputs"
];
in
stdenv.mkDerivation (
{
name = "node-dependencies-${name}${if version == null then "" else "-${version}"}";
buildInputs = [
tarWrapper
python
nodejs
]
++ lib.optional (stdenv.hostPlatform.isLinux) pkgs.util-linux
++ lib.optional (stdenv.hostPlatform.isDarwin) libtool
++ buildInputs;
inherit dontStrip; # Stripping may fail a build for some package deployments
inherit dontNpmInstall unpackPhase buildPhase;
includeScript = includeDependencies { inherit dependencies; };
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
passAsFile = [
"includeScript"
"pinpointDependenciesScript"
];
installPhase = ''
source ${installPackage}
mkdir -p $out/${packageName}
cd $out/${packageName}
source $includeScriptPath
# Create fake package.json to make the npm commands work properly
cp ${src}/package.json .
chmod 644 package.json
${lib.optionalString bypassCache ''
if [ -f ${src}/package-lock.json ]
then
cp ${src}/package-lock.json .
chmod 644 package-lock.json
fi
''}
# Go to the parent folder to make sure that all packages are pinpointed
cd ..
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
${prepareAndInvokeNPM {
inherit
packageName
bypassCache
reconstructLock
npmFlags
production
;
}}
# Expose the executables that were installed
cd ..
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
mv ${packageName} lib
ln -s $out/lib/node_modules/.bin $out/bin
'';
}
// extraArgs
);
# Builds a development shell
buildNodeShell =
{
name,
packageName,
version ? null,
src,
dependencies ? [ ],
buildInputs ? [ ],
production ? true,
npmFlags ? "",
dontNpmInstall ? false,
bypassCache ? false,
reconstructLock ? false,
dontStrip ? true,
unpackPhase ? "true",
buildPhase ? "true",
...
}@args:
let
nodeDependencies = buildNodeDependencies args;
extraArgs = removeAttrs args [
"name"
"dependencies"
"buildInputs"
"dontStrip"
"dontNpmInstall"
"unpackPhase"
"buildPhase"
];
in
stdenv.mkDerivation (
{
name = "node-shell-${name}${if version == null then "" else "-${version}"}";
buildInputs = [
python
nodejs
]
++ lib.optional (stdenv.hostPlatform.isLinux) pkgs.util-linux
++ buildInputs;
buildCommand = ''
mkdir -p $out/bin
cat > $out/bin/shell <<EOF
#! ${stdenv.shell} -e
$shellHook
exec ${stdenv.shell}
EOF
chmod +x $out/bin/shell
'';
# Provide the dependencies in a development shell through the NODE_PATH environment variable
inherit nodeDependencies;
shellHook = lib.optionalString (dependencies != [ ]) ''
export NODE_PATH=${nodeDependencies}/lib/node_modules
export PATH="${nodeDependencies}/bin:$PATH"
'';
}
// extraArgs
);
in
{
buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist;
buildNodePackage = lib.makeOverridable buildNodePackage;
buildNodeDependencies = lib.makeOverridable buildNodeDependencies;
buildNodeShell = lib.makeOverridable buildNodeShell;
}

View File

@@ -0,0 +1,147 @@
[
"@angular/cli"
, "@antfu/ni"
, "@babel/cli"
, "@commitlint/cli"
, "@microsoft/rush"
, "@tailwindcss/aspect-ratio"
, "@tailwindcss/forms"
, "@tailwindcss/line-clamp"
, "@tailwindcss/typography"
, "@uppy/companion"
, {"@webassemblyjs/cli": "1.11.1"}
, {"@webassemblyjs/repl": "1.11.1"}
, "@webassemblyjs/wasm-strip"
, {"@webassemblyjs/wasm-text-gen": "1.11.1"}
, {"@webassemblyjs/wast-refmt": "1.11.1"}
, "alex"
, "audiosprite"
, "aws-cdk"
, "awesome-lint"
, "browserify"
, "browser-sync"
, "cdk8s-cli"
, "clipboard-cli"
, "coc-cmake"
, "coc-emmet"
, "coc-eslint"
, "coc-flutter"
, "coc-go"
, "coc-haxe"
, "coc-highlight"
, "coc-html"
, "coc-java"
, "coc-jest"
, "coc-json"
, "coc-lists"
, "coc-ltex"
, "coc-markdownlint"
, "coc-pairs"
, "coc-prettier"
, "coc-r-lsp"
, "coc-rust-analyzer"
, "coc-smartf"
, "coc-snippets"
, "coc-solargraph"
, "coc-stylelint"
, "coc-sumneko-lua"
, "coc-sqlfluff"
, "coc-tabnine"
, "coc-texlab"
, "coc-tsserver"
, "coc-ultisnips"
, "coc-vimlsp"
, "coc-vimtex"
, "coc-wxml"
, "coc-yaml"
, "coc-yank"
, "code-theme-converter"
, "conventional-changelog-cli"
, "cpy-cli"
, "create-cycle-app"
, "csslint"
, "dhcp"
, "diff2html-cli"
, "dotenv-vault"
, "elasticdump"
, "@electron-forge/cli"
, "elm-oracle"
, "emoj"
, "emojione"
, "esy"
, "fast-cli"
, "fauna-shell"
, "fkill-cli"
, "fleek-cli"
, "forever"
, "fx"
, "gatsby-cli"
, "@gitbeaker/cli"
, "grunt-cli"
, "makam"
, "gulp"
, "gulp-cli"
, "he"
, "hs-airdrop"
, "imapnotify"
, "joplin"
, "js-beautify"
, "js-yaml"
, "jsdoc"
, "jshint"
, "json"
, "json-diff"
, "json-refs"
, "json-server"
, "jsonlint"
, "jsonplaceholder"
, "katex"
, "keyoxide"
, "lcov-result-merger"
, "live-server"
, "livedown"
, "localtunnel"
, "lua-fmt"
, "madoko"
, "mastodon-bot"
, "mathjax"
, "meat"
, "mocha"
, "multi-file-swagger"
, "nijs"
, "node-gyp-build"
, "node2nix"
, "np"
, "npm-merge-driver"
, "nrm"
, "parsoid"
, "peerflix"
, "peerflix-server"
, "poor-mans-t-sql-formatter-cli"
, "postcss"
, "prebuild-install"
, "pscid"
, "pulp"
, "purescript-language-server"
, "purescript-psa"
, "purs-tidy"
, "purty"
, "sass"
, "semver"
, "sloc"
, "smartdc"
, "speed-test"
, "svelte-check"
, "tern"
, "tiddlywiki"
, "tsun"
, "ts-node"
, "ttf2eot"
, "vega-cli"
, "vega-lite"
, "vercel"
, "wavedrom-cli"
, "webpack"
, "wring"
, "@yaegassy/coc-nginx"
]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,248 @@
# Do not use overrides in this file to add `meta.mainProgram` to packages. Use `./main-programs.nix`
# instead.
{ pkgs, nodejs }:
let
inherit (pkgs)
stdenv
lib
callPackage
fetchFromGitHub
fetchurl
fetchpatch
nixosTests
;
since = version: lib.versionAtLeast nodejs.version version;
before = version: lib.versionOlder nodejs.version version;
in
final: prev: {
inherit nodejs;
"@angular/cli" = prev."@angular/cli".override {
prePatch = ''
export NG_CLI_ANALYTICS=false
'';
nativeBuildInputs = [ pkgs.installShellFiles ];
postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
for shell in bash zsh; do
installShellCompletion --cmd ng \
--$shell <($out/bin/ng completion script)
done
'';
};
"@electron-forge/cli" = prev."@electron-forge/cli".override {
buildInputs = [ final.node-gyp-build ];
};
fast-cli = prev.fast-cli.override {
nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
prePatch = ''
export PUPPETEER_SKIP_DOWNLOAD=1
'';
postInstall = ''
wrapProgram $out/bin/fast \
--set PUPPETEER_EXECUTABLE_PATH ${pkgs.chromium.outPath}/bin/chromium
'';
};
fauna-shell = prev.fauna-shell.override {
# printReleaseNotes just pulls them from GitHub which is not allowed in sandbox
preRebuild = ''
sed -i 's|"node ./tools/printReleaseNotes"|"true"|' node_modules/faunadb/package.json
'';
};
joplin = prev.joplin.override (oldAttrs: {
nativeBuildInputs = [
pkgs.pkg-config
(pkgs.python3.withPackages (ps: [ ps.setuptools ]))
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
pkgs.xcbuild
];
buildInputs = with pkgs; [
# required by sharp
# https://sharp.pixelplumbing.com/install
vips
libsecret
final.node-gyp-build
node-pre-gyp
pixman
cairo
pango
];
# add newer node-addon-api to build sharp
# https://github.com/lovell/sharp/issues/3920
dependencies = [
{
name = "node-addon-api";
packageName = "node-addon-api";
version = "7.1.0";
src = fetchurl {
url = "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz";
sha512 = "mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==";
};
}
]
++ oldAttrs.dependencies;
meta = oldAttrs.meta // {
# ModuleNotFoundError: No module named 'distutils'
broken = stdenv.hostPlatform.isDarwin; # still broken on darwin
};
});
jsonplaceholder = prev.jsonplaceholder.override {
buildInputs = [ nodejs ];
postInstall = ''
exe=$out/bin/jsonplaceholder
mkdir -p $out/bin
cat >$exe <<EOF
#!${pkgs.runtimeShell}
exec -a jsonplaceholder ${nodejs}/bin/node $out/lib/node_modules/jsonplaceholder/index.js
EOF
chmod a+x $exe
'';
};
keyoxide = prev.keyoxide.override {
nativeBuildInputs = [ pkgs.pkg-config ];
buildInputs = with pkgs; [
pixman
cairo
pango
];
};
makam = prev.makam.override {
nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
postFixup = ''
wrapProgram "$out/bin/makam" --prefix PATH : ${lib.makeBinPath [ nodejs ]}
${lib.optionalString stdenv.hostPlatform.isLinux "patchelf --set-interpreter ${stdenv.cc.libc}/lib/ld-linux-x86-64.so.2 \"$out/lib/node_modules/makam/makam-bin-linux64\""}
'';
};
node2nix = prev.node2nix.override {
# Get latest commit for misc fixes
src = fetchFromGitHub {
owner = "svanderburg";
repo = "node2nix";
rev = "315e1b85a6761152f57a41ccea5e2570981ec670";
sha256 = "sha256-8OxTOkwBPcnjyhXhxQEDd8tiaQoHt91zUJX5Ka+IXco=";
};
nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
postInstall =
let
patches = [
# Needed to fix packages with DOS line-endings after above patch - PR svanderburg/node2nix#314
(fetchpatch {
name = "convert-crlf-for-script-bin-files.patch";
url = "https://github.com/svanderburg/node2nix/commit/91aa511fe7107938b0409a02ab8c457a6de2d8ca.patch";
hash = "sha256-ISiKYkur/o8enKDzJ8mQndkkSC4yrTNlheqyH+LiXlU=";
})
# fix nodejs attr names
(fetchpatch {
url = "https://github.com/svanderburg/node2nix/commit/3b63e735458947ef39aca247923f8775633363e5.patch";
hash = "sha256-pe8Xm4mjPh9oKXugoMY6pRl8YYgtdw0sRXN+TienalU=";
})
# Use top-level cctools in generated files - PR svanderburg/node2nix#334
(fetchpatch {
url = "https://github.com/svanderburg/node2nix/commit/31c308bba5f39ea0105f66b9f40dbe57fed7a292.patch";
hash = "sha256-DdNRteonMvyffPh0uo0lUbsohKYnyqv0QcD9vjN6aXE=";
})
];
in
''
${lib.concatStringsSep "\n" (
map (patch: "patch -d $out/lib/node_modules/node2nix -p1 < ${patch}") patches
)}
wrapProgram "$out/bin/node2nix" --prefix PATH : ${lib.makeBinPath [ pkgs.nix ]}
'';
};
pulp = prev.pulp.override {
# tries to install purescript
npmFlags = toString [ "--ignore-scripts" ];
nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
postInstall = ''
wrapProgram "$out/bin/pulp" --suffix PATH : ${
lib.makeBinPath [
pkgs.purescript
]
}
'';
};
rush = prev."@microsoft/rush".override {
name = "rush";
};
ts-node = prev.ts-node.override {
nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
postInstall = ''
wrapProgram "$out/bin/ts-node" \
--prefix NODE_PATH : ${pkgs.typescript}/lib/node_modules
'';
};
tsun = prev.tsun.override {
nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
postInstall = ''
wrapProgram "$out/bin/tsun" \
--prefix NODE_PATH : ${pkgs.typescript}/lib/node_modules
'';
};
uppy-companion = prev."@uppy/companion".override {
name = "uppy-companion";
};
vega-cli = prev.vega-cli.override {
nativeBuildInputs = [ pkgs.pkg-config ];
buildInputs = with pkgs; [
node-pre-gyp
pixman
cairo
pango
libjpeg
];
};
vega-lite = prev.vega-lite.override {
postInstall = ''
cd node_modules
for dep in ${final.vega-cli}/lib/node_modules/vega-cli/node_modules/*; do
if [[ ! -d ''${dep##*/} ]]; then
ln -s "${final.vega-cli}/lib/node_modules/vega-cli/node_modules/''${dep##*/}"
fi
done
'';
passthru.tests = {
simple-execution = callPackage ./package-tests/vega-lite.nix {
inherit (final) vega-lite;
};
};
};
wavedrom-cli = prev.wavedrom-cli.override {
nativeBuildInputs = [
pkgs.pkg-config
pkgs.node-pre-gyp
];
# These dependencies are required by
# https://github.com/Automattic/node-canvas.
buildInputs = with pkgs; [
giflib
pixman
cairo
pango
];
};
}

View File

@@ -0,0 +1,50 @@
{
runCommand,
tailwindcss,
nodePackages,
}:
let
inherit (tailwindcss) packageName version;
tailwindcssInput = builtins.toFile "input.css" ''
@tailwind base;
@tailwind components;
@tailwind utilities;
'';
tailwindcssWithPlugins = tailwindcss.overrideAttrs (oldAttrs: {
plugins = [
nodePackages."@tailwindcss/typography"
];
});
tailwindcssWithPluginsConfig = builtins.toFile "tailwind.config.js" ''
module.exports = {
content: ["./with-typography.input"],
plugins: [
require('@tailwindcss/typography'),
],
}
'';
in
runCommand "${packageName}-tests" { meta.timeout = 60; } ''
mkdir $out
# Ensure CLI runs
${tailwindcss}/bin/tailwind --help > /dev/null
${tailwindcss}/bin/tailwindcss --help > /dev/null
# Ensure CLI with plugins runs
echo '"ml-4 prose"' > ./with-typography.input
${tailwindcssWithPlugins}/bin/tailwind \
--config ${tailwindcssWithPluginsConfig} \
--input ${tailwindcssInput} \
--output $out/with-typography.css
grep -q ml-4 $out/with-typography.css
grep -q prose $out/with-typography.css
''

View File

@@ -0,0 +1,23 @@
{ runCommand, vega-lite }:
let
inherit (vega-lite) packageName version;
in
runCommand "${packageName}-tests" { meta.timeout = 60; } ''
# get version of installed program and compare with package version
claimed_version="$(${vega-lite}/bin/vl2vg --version)"
if [[ "$claimed_version" != "${version}" ]]; then
echo "Error: program version does not match package version ($claimed_version != ${version})"
exit 1
fi
# run dummy commands
${vega-lite}/bin/vl2vg --help > /dev/null
${vega-lite}/bin/vl2svg --help > /dev/null
${vega-lite}/bin/vl2png --help > /dev/null
${vega-lite}/bin/vl2pdf --help > /dev/null
# needed for Nix to register the command as successful
touch $out
''

View File

@@ -0,0 +1,73 @@
#!/usr/bin/env nix-shell
#!nix-shell -i python3 -p python3
import collections.abc
import fileinput
import json
import os.path
import re
import sys
def remove(attr):
with open(os.path.join(os.path.dirname(__file__), 'node-packages.json'), 'r+') as node_packages_json:
packages = json.load(node_packages_json)
idx = 0
while idx < len(packages):
if packages[idx] == attr or (isinstance(packages[idx], collections.abc.Mapping) and next(iter(packages[idx].keys())) == attr):
del packages[idx]
else:
idx += 1
node_packages_json.seek(0)
for idx, package in enumerate(packages):
if idx == 0:
node_packages_json.write('[\n ')
else:
node_packages_json.write(', ')
json.dump(package, node_packages_json)
node_packages_json.write('\n')
node_packages_json.write(']\n')
node_packages_json.truncate()
with fileinput.input(os.path.join(os.path.dirname(__file__), 'node-packages.nix'), inplace=1) as node_packages:
safe_attr = re.escape(attr)
in_attr = False
for line in node_packages:
if in_attr:
if re.fullmatch(r' \};\n', line):
in_attr = False
else:
if re.fullmatch(rf' (?:{safe_attr}|"{safe_attr}") = nodeEnv\.buildNodePackage \{{\n', line):
in_attr = True
else:
sys.stdout.write(line)
with fileinput.input(os.path.join(os.path.dirname(__file__), 'main-programs.nix'), inplace=1) as main_programs:
safe_attr = re.escape(attr)
for line in main_programs:
if not re.fullmatch(rf' "?{safe_attr}"? = ".*";\n', line):
sys.stdout.write(line)
with fileinput.input(os.path.join(os.path.dirname(__file__), 'overrides.nix'), inplace=1) as overrides:
safe_attr = re.escape(attr)
in_attr = False
for line in overrides:
if in_attr:
if re.fullmatch(r' \}\)?;\n', line):
in_attr = False
else:
if re.fullmatch(rf' (?:{safe_attr}|"{safe_attr}") = .* \{{\n', line):
in_attr = True
else:
sys.stdout.write(line)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser(description='Remove a given package from the node-packages.nix file')
parser.add_argument('attr', help='The package attribute to remove')
args = parser.parse_args()
remove(args.attr)