72 lines
No EOL
2.2 KiB
JavaScript
72 lines
No EOL
2.2 KiB
JavaScript
#!/usr/bin/env node
|
|
var tsp = require("typescript-parser");
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
var ts = require("typescript");
|
|
|
|
var parser = new tsp.TypescriptParser();
|
|
var excludedDirs = [
|
|
'generated-sources'
|
|
];
|
|
|
|
var walkFileTree = function (dir, action) {
|
|
if (typeof action !== "function") {
|
|
return;
|
|
}
|
|
|
|
fs.readdirSync(dir).forEach(function (file) {
|
|
var path = dir + "/" + file;
|
|
var stat = fs.statSync(path);
|
|
var extension = ".ts";
|
|
if (stat && stat.isDirectory() && excludedDirs.indexOf(file) === -1) {
|
|
walkFileTree(path, action);
|
|
}
|
|
else if (path.indexOf(extension, path.length - extension.length) !== -1) {
|
|
action(null, path);
|
|
}
|
|
});
|
|
};
|
|
|
|
var dateInLong = Date.now();
|
|
var arr = [];
|
|
|
|
var basePath = path.resolve(__dirname, "src/ts/");
|
|
walkFileTree(basePath, function (err, file) {
|
|
var content = fs.readFileSync(file).toString();
|
|
var jsonStructure = parser.parseTypescript(ts.createSourceFile(
|
|
file,
|
|
content,
|
|
ts.ScriptTarget.Latest,
|
|
true,
|
|
ts.ScriptKind.TS
|
|
),
|
|
'/');
|
|
jsonStructure['packageName'] = path.relative(path.resolve(__dirname, "src/ts/"),jsonStructure['filePath']);
|
|
jsonStructure['imports'].forEach( function (val) {
|
|
if (val.libraryName.startsWith(".")) {
|
|
val['libraryName'] = path.resolve(path.dirname(jsonStructure['filePath']), val['libraryName']);
|
|
val['libraryName'] = path.relative(path.resolve(__dirname, "src/ts/"), val['libraryName']);
|
|
val['libraryName'] = path.dirname(val['libraryName']).split(path.sep).join(".");
|
|
}
|
|
});
|
|
delete jsonStructure['filePath'];
|
|
jsonStructure['packageName'] = path.dirname(jsonStructure['packageName']).split(path.sep).join( ".");
|
|
arr.push(jsonStructure);
|
|
});
|
|
var cache = [];
|
|
|
|
fs.writeFileSync("./../.studio/typescript.metadata.json",
|
|
JSON.stringify(arr, function (key, value) {
|
|
if (typeof value === 'object' && value !== null) {
|
|
if (cache.indexOf(value) !== -1) {
|
|
// Circular reference found, discard key
|
|
return;
|
|
}
|
|
// Store value in our collection
|
|
cache.push(value);
|
|
}
|
|
return value;
|
|
}));
|
|
|
|
cache = null;
|
|
console.log("typescript parse time = " + (Date.now() - dateInLong)); |