UNPKG

@natlibfi/sru-client

Version:
76 lines (75 loc) 3.45 kB
import fs from "fs"; import yargs from "yargs"; import { handleInterrupt } from "@natlibfi/melinda-backend-commons"; import createSruClient from "./index"; run(); function run() { process.on("SIGINT", handleInterrupt).on("unhandledRejection", handleInterrupt).on("uncaughtException", handleInterrupt); const args = yargs(process.argv.slice(2)).scriptName("sru-cli").wrap(yargs.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((args2) => { const [query2] = args2._; if (query2 === void 0) { throw new Error("No query given"); } return true; }).parseSync(); const [query] = args._; const { url, showOutputRecord, writeFiles, retrieveAll, recordSchema, metadataFormat, overwriteFiles } = args; const sruClient = createSruClient({ url, recordSchema, retrieveAll, metadataFormat }); let recordCounter = 0; 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) { recordCounter++; console.log(`Record ${recordCounter}/${recordTotal}`); if (showOutputRecord) { console.log("Output:"); console.log(record); } const folder = "./results"; if (writeFiles) { console.log(`Writing to file: ${folder}/${recordCounter}`); prepareFolder(folder, recordCounter); fs.writeFileSync(`${folder}/${recordCounter}`, JSON.stringify(record.toObject())); return; } function prepareFolder(folder2, fileName) { if (fs.existsSync(folder2)) { if (overwriteFiles) { return; } if (fs.existsSync(`${folder2}/${fileName}`)) { throw new Error(`${folder2}/${fileName} allready exist`); } return; } fs.mkdirSync(folder2); 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