summaryrefslogtreecommitdiff
path: root/tests/registry/npm/trim_registry_files.js
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2024-09-12 13:15:38 +0100
committerGitHub <noreply@github.com>2024-09-12 12:15:38 +0000
commitb0265eaf8f1d42ec983c2fef0d78435239442ddc (patch)
tree2d8aa5a429a453e106b00de2f8b35466968c8156 /tests/registry/npm/trim_registry_files.js
parent4983f763d480f73a7e0d55549afb7af87fa7f04b (diff)
chore(test): add script for pruning registry.json files (#25594)
Diffstat (limited to 'tests/registry/npm/trim_registry_files.js')
-rwxr-xr-xtests/registry/npm/trim_registry_files.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/registry/npm/trim_registry_files.js b/tests/registry/npm/trim_registry_files.js
new file mode 100755
index 000000000..a47ded794
--- /dev/null
+++ b/tests/registry/npm/trim_registry_files.js
@@ -0,0 +1,72 @@
+#!/usr/bin/env -S deno run --allow-write=. --allow-read=.
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+
+// Run this to trim the registry.json files
+
+for (const dirPath of getPackageDirs()) {
+ if (dirPath.includes("@denotest")) {
+ continue;
+ }
+ const versions = Array.from(Deno.readDirSync(dirPath)
+ .map(e => extractVersion(e.name)))
+ .filter(e => e != null);
+
+ const registryPath = dirPath + "/registry.json";
+ const data = JSON.parse(Deno.readTextFileSync(registryPath));
+ // this is to save data
+ for (const version in data.versions) {
+ if (!versions.includes(version)) {
+ delete data.versions[version];
+ } else {
+ delete data._id;
+ delete data._rev;
+ delete data.users;
+ delete data.contributors;
+ delete data.maintainers;
+ delete data.keywords;
+ delete data.time;
+ delete data.versions[version].contributors;
+ delete data.versions[version].homepage;
+ delete data.versions[version].keywords;
+ delete data.versions[version].maintainers;
+ delete data.versions[version]._npmUser;
+ delete data.versions[version]._npmOperationalInternal;
+ if (!versions.includes(data["dist-tags"].latest)) {
+ data["dist-tags"].latest = [...versions].sort().pop();
+ }
+ for (const distTag in data["dist-tags"]) {
+ if (!versions.includes(data["dist-tags"][distTag])) {
+ delete data["dist-tags"][distTag];
+ }
+ }
+ }
+ }
+ Deno.writeTextFileSync(registryPath, JSON.stringify(data, null, 2) + "\n");
+}
+
+function extractVersion(name) {
+ const index = name.lastIndexOf('-');
+ if (index === -1)
+ return undefined;
+ return name.substring(index + 1).replace(/\.tgz$/, "");
+}
+
+function* getPackageDirs() {
+ for (const entry of Deno.readDirSync(import.meta.dirname)) {
+ if (!entry.isDirectory) {
+ continue;
+ }
+
+ if (entry.name.startsWith("@")) {
+ const dirPath = import.meta.dirname + "/" + entry.name;
+ for (const entry of Deno.readDirSync(dirPath)) {
+ if (!entry.isDirectory) {
+ continue;
+ }
+ yield dirPath + "/" + entry.name;
+ }
+ } else {
+ yield import.meta.dirname + "/" + entry.name;
+ }
+ }
+}