blob: cad90393c5e4fb2a99b3eacf97056835178d00b2 [file] [log] [blame]
import fs from 'fs';
import Promise from 'bluebird';
import CouchBulkImporter from 'couchbulkimporter';
import parse from 'csv-parse';
import BulkBadger from 'bulkbadger';
import {checkUrl} from './utils';
import nmo from './nmo.js';
export function cli (file, url, ...csvOptions) {
if (!file) {
const msg = [
'Usage:',
'',
'nmo import-csv [file] [couchdb-url] [...<csv options> <pairs>]',
].join('\n');
const err = new Error(msg);
err.type = 'EUSAGE';
throw err;
}
const er = checkUrl(url);
if (er) {
throw er;
}
const opts = {delimiter: nmo.config.get('delimiter'), columns: nmo.config.get('columns')};
return importcsv.apply(importcsv, [file, url, opts]);
}
export default importcsv;
function importcsv (file, url, {delimiter= ',', columns= true}) {
return new Promise((resolve, reject) => {
const input = fs.createReadStream(file)
.on('error', (err) => {
err.message = 'Error reading file - ' + err.message;
reject(err);
});
const parser = parse({
delimiter: delimiter,
columns: columns
});
input
.pipe(parser)
.pipe(new BulkBadger())
.pipe(new CouchBulkImporter({
url: url
}))
.on('error', function (err) {
err.message = 'Error uploading - ' + err.message;
reject(err);
})
.on('finish', function () {
console.log('Upload complete!');
resolve();
});
});
}