forked from microsoft/TypeScript-Website
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathupdateURLs.js
More file actions
90 lines (72 loc) · 3.51 KB
/
Copy pathupdateURLs.js
File metadata and controls
90 lines (72 loc) · 3.51 KB
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
// @ts-check
/**
* A script to automatically update the Visual Studio links
* based on the latest *stable* version of TypeScript shipped
* to npm.
*/
const axios = require('axios').default;
const {writeFileSync} = require("fs")
/**
* Gets the NPM package JSON for a module
* @param {string} name
*/
const getLatestNPMPackage = async (name) => {
const packageJSON = await axios({
url: `https://registry.npmjs.org/${name}`
})
return packageJSON.data
}
/**
* Queries the VS markplace for typescript extensions, returns
* only official extensions
*/
const getLatestVSExtensions = async () => {
const headers = {
'Content-Type': 'application/json',
'Accept': 'application/json;api-version=5.2-preview.1;excludeUrls=true',
'Host': 'marketplace.visualstudio.com',
'Origin': 'https://marketplace.visualstudio.com',
'Referer': 'https://marketplace.visualstudio.com/search?term=typescript&target=VS&category=All%20categories&vsVersion=vs2019&sortBy=Relevance',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Safari/605.1.15',
'Content-Length': '1082',
'Connection': 'keep-alive',
'X-TFS-Session': 'e16c1b5b-850f-42ee-ab7c-519c79f6e356',
'X-Requested-With': 'XMLHttpRequest',
'X-VSS-ReauthenticationAction': 'Suppress',
};
const query = (name) =>
`{"assetTypes":["Microsoft.VisualStudio.Services.Icons.Default","Microsoft.VisualStudio.Services.Icons.Branding","Microsoft.VisualStudio.Services.Icons.Small"],"filters":[{"criteria":[{"filterType":8,"value":"Microsoft.VisualStudio.Ide"},{"filterType":10,"value":"${name}"},{"filterType":12,"value":"37888"}],"direction":2,"pageSize":54,"pageNumber":1,"sortBy":0,"sortOrder":0,"pagingToken":null}],"flags":870}`
const extensionSearchResults = await axios({
url: 'https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery',
method: 'POST',
headers: headers,
data: query("typescript")
})
if (!extensionSearchResults.data || !extensionSearchResults.data.results) {
throw new Error("Got a bad response from VS marketplace")
}
const extensions = extensionSearchResults.data.results[0].extensions
const officialExtensions = extensions.filter(e => e.publisher.publisherId === "4f0355d2-4a53-4ab1-a8ea-507f4a333a6f")
return officialExtensions
}
const go = async () => {
// curl https://registry.npmjs.org/typescript | jq
console.log("Grabbing the TypeScript package from NPM, this takes about 10-15s")
const tsPackage = await getLatestNPMPackage("typescript")
const latest = tsPackage["dist-tags"].latest
console.log(`Grabbing the VS TypeScript extension for ${latest} from the marketplace`)
const extensions = await getLatestVSExtensions()
console.log(`Found ${extensions.length} extensions`)
const sortedByVersion = extensions.sort((l, r) => r.versions[0].version.localeCompare(l.versions[0].version)).filter(e => !e.extensionName.toLowerCase().includes("beta"))
console.log(`Looking at ${sortedByVersion.map(e => e.versions[0].version).join(", ")}`)
// @ts-ignore
const currentURLs = require("../src/_data/urls")
if (sortedByVersion[0]) {
const extensionURL = `https://marketplace.visualstudio.com/items?itemName=TypeScriptTeam.${sortedByVersion[0].extensionName}`
currentURLs.vs2017_download = extensionURL
currentURLs.vs2019_download = extensionURL
}
writeFileSync("src/_data/urls.json", JSON.stringify(currentURLs, null, " "))
console.log(`Updated src/_data/urls.json`)
}
go()