mirror of
https://github.com/denoland/deno.git
synced 2024-12-24 08:09:08 -05:00
72 lines
2.2 KiB
JavaScript
Executable file
72 lines
2.2 KiB
JavaScript
Executable file
#!/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;
|
|
}
|
|
}
|
|
}
|