This repository has been archived by the owner on Jun 2, 2023. It is now read-only.
/
pack-translator.js
69 lines (55 loc) · 2.49 KB
/
pack-translator.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
#!/usr/bin/env node
var fs = require("fs");
var path = require("path");
var program = require('commander');
var dom = require('xmldom').DOMParser;
var xpath = require('xpath');
var LocalPackageSource = require("opent2t/package/LocalPackageSource").LocalPackageSource;
program
.version("0.1.0")
.usage("<translator name>")
.parse(process.argv);
if (program.args.length != 1) {
program.outputHelp();
} else {
packTranslator(program.args[0]);
}
function getSchemasFromManifest(manifestPath) {
var doc = new dom().parseFromString(fs.readFileSync(manifestPath).toString());
var schemaNodes = xpath.select("//manifest/schemas/schema[not(@main) or @main='false']/@id", doc, false);
return schemaNodes.map(s => {
return s.value + "/*";
});
}
function packTranslator(name) {
var translatorPackageName = "opent2t-translator-" + name.replace(/\./g, "-");
var packageSource = new LocalPackageSource(".");
packageSource.getPackageInfoAsync(translatorPackageName).then(function (packageInfo) {
if (!packageInfo) {
console.error("Package not found. " +
"Make sure the current directory is the root of the translators repo.");
return;
}
var packageTranslatorInfo = packageInfo.translators[0];
var packageJsonPath = packageTranslatorInfo.moduleName.replace("/thingTranslator", "/package.json");
var manifestPath = packageTranslatorInfo.moduleName.replace("/thingTranslator", "/manifest.xml");
var packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
LocalPackageSource.mergePackageInfo(packageJson, packageInfo);
packageJson.main = packageTranslatorInfo.moduleName;
var schemaName = packageTranslatorInfo.moduleName.split("/")[0];
var translatorName = packageTranslatorInfo.moduleName.split("/")[1];
packageJson.files = [
schemaName + "/*.raml",
schemaName + "/*.xml",
schemaName + "/*.json",
schemaName + "/*.js",
schemaName + "/" + translatorName
];
packageJson.files = packageJson.files.concat(getSchemasFromManifest(manifestPath));
fs.writeFileSync("package.json", JSON.stringify(packageJson, null, 2), "utf8");
console.log("Generated ./package.json file for " + packageJson.name + ".\n" +
"Ready for npm pack or npm publish.");
}).catch (function (error) {
console.error("Failed to load package info: " + error);
});
}