-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupdate-tern-plugins-json.js
75 lines (62 loc) · 2.02 KB
/
update-tern-plugins-json.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
/**
* Read 'plugins.json'
* and replace every entry with new by reading the latest info from `metadataurl` (if present).
* If there is no `metadataurl` in the new entry, then keep older value
* (This allows an older plugin to redirect to new location).
* '_metadata-repository.json' file is only saved if and when all requested json files are received and parsed.
*
* before running do `npm i request`
* that will be install into ../node_modules
*
* version 0.2
* @author Paul Verest
*/
var repositoryFile = 'plugins.json';
var fs = require('fs');
var request = require('request');
var ternRepository = require('./'+repositoryFile);
var counter = 0;
var requestCount = 0;
var responseCount = 0;
var requestedAllEntries = false;
var saveRepositoryJsonFile = function(){
console.log(''+requestCount+' requests, '+responseCount+' responses');
if (!requestedAllEntries){
// unlikely situation when some response comes before cycle finishes
return;
}
if (requestCount > responseCount){
// not all responses yet came
return;
}
fs.writeFileSync('./'+repositoryFile, JSON.stringify(ternRepository,null,2) );
console.log('Finished processing '+counter+' entries. '+repositoryFile+' file is updated.');
};
for (var i in ternRepository){
var entry = ternRepository[i];
counter++;
console.log(entry);
if (!entry.metadataurl){
continue;
}
(function closure(i, metadataurl) { //closure
requestCount++;
request.get(entry.metadataurl, function onResponse(error, response, body) {
if (!error && response.statusCode == 200) {
console.log('updating entry '+i+' with');
console.log(body);
var entry = JSON.parse(body);
if (!entry.metadataurl){
entry.metadataurl = metadataurl;
}
ternRepository[i] = entry;
responseCount++;
saveRepositoryJsonFile();
// we don't know what response will come the last
// at that point we are to save file
}
});
})(i, entry.metadataurl);
};
requestedAllEntries = true;
saveRepositoryJsonFile();