summary refs log tree commit diff
path: root/pkgs/development/node-packages
diff options
context:
space:
mode:
authorLily Foster <lily@lily.flowers>2023-05-08 19:50:00 -0400
committerLily Foster <lily@lily.flowers>2023-05-08 19:50:41 -0400
commitb4ce2478b6986693e9f1c8d0cf8e40f19765eeff (patch)
tree01fa419e750bdf3074e5b3af9088f6dcc7f00668 /pkgs/development/node-packages
parent897876e4c484f1e8f92009fd11b7d988a121a4e7 (diff)
downloadnixpkgs-b4ce2478b6986693e9f1c8d0cf8e40f19765eeff.tar
nixpkgs-b4ce2478b6986693e9f1c8d0cf8e40f19765eeff.tar.gz
nixpkgs-b4ce2478b6986693e9f1c8d0cf8e40f19765eeff.tar.bz2
nixpkgs-b4ce2478b6986693e9f1c8d0cf8e40f19765eeff.tar.lz
nixpkgs-b4ce2478b6986693e9f1c8d0cf8e40f19765eeff.tar.xz
nixpkgs-b4ce2478b6986693e9f1c8d0cf8e40f19765eeff.tar.zst
nixpkgs-b4ce2478b6986693e9f1c8d0cf8e40f19765eeff.zip
nodePackages: add script to remove attrs for aliases
Regenerating the entire package set takes ages and editing the file by
hand is difficult. Instead we provide a script to remove packages
without regenerating to make it easy.
Diffstat (limited to 'pkgs/development/node-packages')
-rw-r--r--pkgs/development/node-packages/aliases.nix4
-rwxr-xr-xpkgs/development/node-packages/remove-attr.py54
2 files changed, 58 insertions, 0 deletions
diff --git a/pkgs/development/node-packages/aliases.nix b/pkgs/development/node-packages/aliases.nix
index 6bf783185d8..4db26a9e3be 100644
--- a/pkgs/development/node-packages/aliases.nix
+++ b/pkgs/development/node-packages/aliases.nix
@@ -1,6 +1,10 @@
 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.
 
 with self;
 
diff --git a/pkgs/development/node-packages/remove-attr.py b/pkgs/development/node-packages/remove-attr.py
new file mode 100755
index 00000000000..d0f95e3e63a
--- /dev/null
+++ b/pkgs/development/node-packages/remove-attr.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i python3 -p
+
+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)
+
+
+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)