-
Notifications
You must be signed in to change notification settings - Fork 0
/
Index.js
91 lines (76 loc) · 2.16 KB
/
Index.js
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
const Express = require('express')
const App = Express()
const FS = require("fs")
const PackageNameRegex = require('package-name-regex')
const Fetch = require("sync-fetch")
const SemVer = require("semver")
function GetVersions(Package) {
return Fetch(
`https://registry.npmjs.org/${Package}`,
{
headers: {
Accept: "application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*"
}
}
).json().versions
}
App.get(
"/versions/",
async function (Request, Response) {
console.log(Request.query.q)
const Package = Request.query.q
if (!PackageNameRegex.test(Package)) {
Response.send(false)
return
}
const Versions = GetVersions(Package)
if (!Versions) {
Response.send(false)
return
}
const Output = {
Name: Package,
Versions: Object.keys(Versions)
}
Response.send(Output)
}
)
App.get(
"/version/",
async function (Request, Response) {
console.log(Request.query.q)
const Package = Request.query.q
const Version = Request.query.v
if (!PackageNameRegex.test(Package)) {
Response.send(false)
return
}
const Versions = GetVersions(Package)
if (!Versions) {
Response.send(false)
return
}
const MatchingVersion = SemVer.maxSatisfying(Object.keys(Versions), Version)
const Output = {
Name: Package,
Version: MatchingVersion,
VersionData: Versions[MatchingVersion]
}
Response.send(Output)
}
)
App.get(
"/exists/",
async function (Request, Response) {
console.log(Request.query.q)
const Package = Request.query.q
if (!PackageNameRegex.test(Package)) {
Response.send(false)
return
}
Response.send(Fetch(`https://registry.npmjs.org/${Package}/latest`).status != 404)
}
)
const Port = FS.readFileSync(`${process.cwd()}/PortNumber`, "utf-8")
console.log(`Listening at port number ${Port}`)
App.listen(Port)