forked from rescript-lang/rescript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathglob_deps.js
65 lines (51 loc) · 1.67 KB
/
glob_deps.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
'use strict';
var fs = require('fs')
// '_build/ext/ext_char.ml.depends'
var glob = require('glob')
var path = require('path')
function clean(x){
return x.filter(y=>y)
}
function allDeps(file){
return fs.readFileSync(file,'utf8').split('\n').map(x=>x.trim()).filter(x=>x).map(x=>{ var bs = x.split(':',2); return bs[1]}).filter(x=>x).map(x=>x.trim()).filter(x=>x).map(x=>x.split(' ')).reduce((prev,curr)=>prev.concat(curr) , [])
}
// a - b
function diff(a,b){
var a_copy = new Set(a)
for (let u of b){
if(a_copy.has(u)){
a_copy.delete(u)
}
}
return a_copy
}
function getModuleName(x){
return toCapital(path.basename(path.basename(x,'.mli'),'.ml'))
}
function stdlibModules(){
return new Set(glob.sync(`${__dirname}/../jscomp/stdlib/*.ml`).map(getModuleName))
}
var stdlibModules = stdlibModules()
// glob.sync('_build/ext/*.depends').map(allDeps).reduce((prev,curr)=>prev.concat(curr), [])
// console.log(stdlibModules)
function toCapital(x){
if (x.length){
return x[0].toUpperCase() + x.slice(1)
}else{
return x
}
}
function dependsOfDir(dir){
console.log(`processing ${dir}`)
var pattern = `${dir}/*.depends`;
var files = glob.sync(pattern);
var existing_modules = new Set(files.map(x=> path.basename(path.basename(x,'.mli.depends'),'.ml.depends')).map(x=>toCapital(x)))
// console.log(pattern,files);
return diff(diff(new Set(files.map(allDeps).reduce((prev,curr)=>prev.concat(curr), [])),
existing_modules), stdlibModules)
}
if(require.main === module){
process.argv.slice(2).forEach((val,index)=>{
console.log(dependsOfDir(`${__dirname}/../jscomp/_build/${val}`))
})
}