@natlibfi/sru-client
Version:
SRU Javascript client library
132 lines (127 loc) • 4.37 kB
JavaScript
;
var _fs = _interopRequireDefault(require("fs"));
var _yargs = _interopRequireDefault(require("yargs"));
var _melindaBackendCommons = require("@natlibfi/melinda-backend-commons");
var _index = _interopRequireDefault(require("./index"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
run();
/* eslint-disable max-statements, no-console */
function run() {
// const logger = createLogger();
process.on('SIGINT', _melindaBackendCommons.handleInterrupt).on('unhandledRejection', _melindaBackendCommons.handleInterrupt).on('uncaughtException', _melindaBackendCommons.handleInterrupt);
const args = (0, _yargs.default)(process.argv.slice(2)).scriptName('sru-cli').wrap(_yargs.default.terminalWidth()).epilog('Copyright (C) 2025 University Of Helsinki (The National Library Of Finland)').usage('Environment variable info in example.env').usage('Installed globally: $0 <query> [options]').usage('Not installed: npx $0 <query> [options]').usage('Build from source: node dist/index.js <query> [options]').showHelpOnFail(true).example([['$ node dist/cli.js rec.id=001234567'], ['$ node dist/cli.js dc.title="malli" -s true'], ['$ node dist/cli.js <query>']]).version().env('SRU').positional('query', {
type: 'string',
describe: 'sru query'
}).options({
s: {
alias: 'showOutputRecord',
type: 'boolean',
default: false,
describe: ''
},
o: {
alias: 'overwriteFiles',
type: 'boolean',
default: true,
describe: ''
},
a: {
alias: 'retrieveAll',
type: 'boolean',
default: false,
describe: 'Retrieve all record for query'
},
r: {
alias: 'recordSchema',
type: 'marcxml',
default: false,
describe: 'Sru endpoint record schema'
},
m: {
alias: 'metadataFormat',
type: 'string',
default: 'string',
describe: 'Record output schema (string (xml), object, marcJson)'
},
w: {
alias: 'writeFiles',
type: 'boolean',
default: false,
describe: 'Record output as files'
}
}).check(args => {
const [query] = args._;
if (query === undefined) {
throw new Error('No query given');
}
return true;
}).parseSync();
// console.log(JSON.stringify(args));
const [query] = args._;
const {
url,
showOutputRecord,
writeFiles,
retrieveAll,
recordSchema,
metadataFormat,
overwriteFiles
} = args;
const sruClient = (0, _index.default)({
url,
recordSchema,
retrieveAll,
metadataFormat
});
// eslint-disable-next-line functional/no-let
let recordCounter = 0;
// eslint-disable-next-line functional/no-let
let recordTotal = 0;
sruClient.searchRetrieve(query).on('total', onTotal).on('record', onRecord).on('end', onEnd).on('error', onError);
function onTotal(total) {
recordTotal = total;
console.log('********************');
console.log(`Query has total of ${total} records`);
console.log('********************');
}
function onRecord(record) {
// eslint-disable-line
// Comment: console.log(record);
recordCounter++; //eslint-disable-line
console.log(`Record ${recordCounter}/${recordTotal}`);
if (showOutputRecord) {
// eslint-disable-line
console.log('Output:'); // eslint-disable-line
console.log(record); // eslint-disable-line
}
const folder = './results';
if (writeFiles) {
console.log(`Writing to file: ${folder}/${recordCounter}`); // eslint-disable-line
prepareFolder(folder, recordCounter);
_fs.default.writeFileSync(`${folder}/${recordCounter}`, JSON.stringify(record.toObject()));
return;
}
function prepareFolder(folder, fileName) {
if (_fs.default.existsSync(folder)) {
if (overwriteFiles) {
return;
}
if (_fs.default.existsSync(`${folder}/${fileName}`)) {
throw new Error(`${folder}/${fileName} allready exist`);
}
return;
}
_fs.default.mkdirSync(folder);
return;
}
}
function onEnd(nextRecordOffset) {
console.log('********** THE END **********');
console.log(`NextRecordOffset: ${nextRecordOffset}`);
console.log('********************');
}
function onError(err) {
console.log(`Error: ${err}`);
}
}
//# sourceMappingURL=cli.js.map