packages/ts2kt-automator/index.js (66 lines of code) (raw):
#!/usr/bin/env node
'use strict';
const lib = require('./lib');
const minimist = require('minimist');
const mkdirp = require('mkdirp');
const fs = require('fs');
const argv = minimist(process.argv.slice(2));
const packageName = process.argv[process.argv.length - 1];
const dest = argv.dest;
if (!argv.dest) {
throw new Error(
'Destination folder should be specified as follows: --dest=typings'
);
}
function installOnePackage(packageName, destFolder) {
const [name] = packageName.split('@');
const dest = `${destFolder}/${name}`;
return new Promise((resolve, reject) => {
mkdirp(dest, function () {
lib
.installTypes(name)
.then(() => lib.convertTypesToKotlin(name, dest))
.catch(reject)
.then(resolve);
});
});
}
function installAllPackages() {
console.log(
'We\'ll download every package from "dependencies" in package.json which is not downloaded yet.'
);
const dependencies = lib.getPackageDependencies();
Object.keys(dependencies)
.reduce((promise, packageName) => {
const [name] = packageName.split('@');
const packageDest = `${dest}/${name}`;
if (fs.existsSync(packageDest)) {
console.log(
`Path "${packageDest}" already exists and will not be overridden.`
);
return promise;
}
return promise
.then(() => installOnePackage(name, dest))
.catch((err) => {
try {
fs.unlinkSync(packageDest);
} catch (err) {
console.error('Cannot clear folder after error', packageDest, err);
}
console.error(err);
});
}, Promise.resolve())
.catch((err) => {
console.error(err);
process.exit(1);
});
}
if (!packageName) {
installAllPackages();
} else {
installOnePackage(packageName, dest).catch((err) => {
console.error(err);
process.exit(1);
});
}