diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-09-12 13:15:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-12 12:15:38 +0000 |
commit | b0265eaf8f1d42ec983c2fef0d78435239442ddc (patch) | |
tree | 2d8aa5a429a453e106b00de2f8b35466968c8156 /tests/registry/npm/trim_registry_files.js | |
parent | 4983f763d480f73a7e0d55549afb7af87fa7f04b (diff) |
chore(test): add script for pruning registry.json files (#25594)
Diffstat (limited to 'tests/registry/npm/trim_registry_files.js')
-rwxr-xr-x | tests/registry/npm/trim_registry_files.js | 72 |
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; + } + } +} |