summaryrefslogtreecommitdiff
path: root/tests/registry/npm/trim_registry_files.js
blob: 608624b1d3e0ef7ff7e1761e10346a1e7b94dcf0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/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
  delete data.readme;
  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;
      delete data.versions[version].dist.signatures;
      delete data.versions[version].dist["npm-signature"];
      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;
    }
  }
}