jbrowse-nclist-cli
Version:
This CLI gets the genes with in a location range from JBrowse
101 lines • 12 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __asyncValues = (this && this.__asyncValues) || function (o) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o[Symbol.asyncIterator], i;
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const commander_2 = require("commander");
const figlet_1 = __importDefault(require("figlet"));
const node_fetch_1 = __importDefault(require("node-fetch"));
const generic_filehandle_1 = require("generic-filehandle");
const nclist_1 = __importDefault(require("@gmod/nclist"));
function ParseInt(value) {
// parseInt takes a string and a radix
const parsedValue = parseInt(value, 10);
if (isNaN(parsedValue)) {
throw new commander_2.InvalidArgumentError('Not a number.');
}
return parsedValue;
}
const program = new commander_1.Command();
program
.version("1.0.0")
.description(`${figlet_1.default.textSync("JBrowse NCList")}\nA wrapper around gmod/nclist-js. It returns JSON for generating cross references to JBrowse features`)
.requiredOption("-b, --baseurl <value>", "Path to JBrowse Data Directory - base URL for resolving relative URLs")
.requiredOption("-t, --template <value>", "URL Template")
.requiredOption("-r, --refseq <value>", "The Sequence name")
.requiredOption("-s, --start <integer>", "start position", ParseInt)
.requiredOption("-e, --end <integer>", "end position", ParseInt)
.option("-d, --displayname [string]", "jbrowse displayname fields", "alias")
.option("-i, --seqid [string]", "the sequence name for the location of the features", "seq_id")
.option("-n, --idname [string]", "the sequence identifier of the features", "name")
.option("-v, --verbose", "For debugigng purposes")
.parse(process.argv);
const options = program.opts();
if (options.verbose) {
console.log("Options:");
console.log(options);
}
// scott says make alias and name configurable
function encodeGene(feature) {
var display_name = (Array.isArray(feature.get(options.displayname))) ? feature.get(options.displayname)[0] : feature.get(options.displayname);
var id_name = (Array.isArray(feature.get(options.idname))) ? feature.get(options.idname)[0] : feature.get(options.idname);
return {
location: `${feature.get(options.seqid)}:${feature.get('start')}-${feature.get('end')}`,
display_name: display_name,
id: id_name
};
}
;
(() => __awaiter(void 0, void 0, void 0, function* () {
var _a, e_1, _b, _c;
const store = new nclist_1.default({
baseUrl: options.baseurl,
urlTemplate: options.template,
readFile: (url) => new generic_filehandle_1.RemoteFile(url, { fetch: node_fetch_1.default }).readFile(),
});
var genes = [];
try {
for (var _d = true, _e = __asyncValues(store.getFeatures({
refName: options.refseq,
start: options.start,
end: options.end,
})), _f; _f = yield _e.next(), _a = _f.done, !_a;) {
_c = _f.value;
_d = false;
try {
const feature = _c;
genes.push(encodeGene(feature));
}
finally {
_d = true;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
}
finally { if (e_1) throw e_1.error; }
}
console.log(JSON.stringify(genes));
}))();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLHlDQUFvQztBQUNwQyx5Q0FBZ0Q7QUFDaEQsb0RBQTRCO0FBQzVCLDREQUErQjtBQUMvQiwyREFBZ0Q7QUFDaEQsMERBQWtDO0FBSWxDLFNBQVMsUUFBUSxDQUFDLEtBQVU7SUFDMUIsc0NBQXNDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEMsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxJQUFJLGdDQUFvQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ2pEO0lBQ0QsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELE1BQU0sT0FBTyxHQUFHLElBQUksbUJBQU8sRUFBRSxDQUFDO0FBQzlCLE9BQU87S0FDSixPQUFPLENBQUMsT0FBTyxDQUFDO0tBQ2hCLFdBQVcsQ0FDVixHQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHdHQUF3RyxDQUFDO0tBQzlJLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSx1RUFBdUUsQ0FBQztLQUNqSCxjQUFjLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDO0tBQ3hELGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQztLQUMzRCxjQUFjLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDO0tBQ25FLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDO0tBQy9ELE1BQU0sQ0FBQyw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSxPQUFPLENBQUM7S0FDM0UsTUFBTSxDQUFDLHNCQUFzQixFQUFFLG9EQUFvRCxFQUFFLFFBQVEsQ0FBQztLQUM5RixNQUFNLENBQUMsdUJBQXVCLEVBQUUseUNBQXlDLEVBQUUsTUFBTSxDQUFDO0tBQ2xGLE1BQU0sQ0FBQyxlQUFlLEVBQUUsd0JBQXdCLENBQUM7S0FDakQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUV2QixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFFL0IsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO0lBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtDQUNyQjtBQUdELDhDQUE4QztBQUM5QyxTQUFTLFVBQVUsQ0FBQyxPQUFZO0lBQzlCLElBQUksWUFBWSxHQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNySixJQUFJLE9BQU8sR0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakksT0FBTztRQUNMLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN2RixZQUFZLEVBQUUsWUFBWTtRQUMxQixFQUFFLEVBQUUsT0FBTztLQUNaLENBQUM7QUFDSixDQUFDO0FBRUQsQ0FBQztBQUFBLENBQUMsR0FBUyxFQUFFOztJQUNYLE1BQU0sS0FBSyxHQUFHLElBQUksZ0JBQU0sQ0FBQztRQUN2QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzdCLFFBQVEsRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSwrQkFBVSxDQUFDLEdBQUcsRUFBRSxFQUFDLEtBQUssRUFBRSxvQkFBdUIsRUFBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0tBQzVGLENBQUMsQ0FBQTtJQUNGLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQTs7UUFDZCxLQUE0QixlQUFBLEtBQUEsY0FBQSxLQUFLLENBQUMsV0FBVyxDQUFDO1lBQzVDLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN2QixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7WUFDcEIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO1NBQ2pCLENBQUMsQ0FBQSxJQUFBO1lBSjBCLGNBSTFCO1lBSjBCLFdBSTFCOztnQkFKUyxNQUFNLE9BQU8sS0FBQSxDQUFBO2dCQUt0QixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzs7OztTQUNqQzs7Ozs7Ozs7O0lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFBLENBQUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQge0ZldGNoZXJ9IGZyb20gXCJnZW5lcmljLWZpbGVoYW5kbGVcIlxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gZnJvbSBcImNvbW1hbmRlclwiXG5pbXBvcnQgZmlnbGV0IGZyb20gXCJmaWdsZXRcIjtcbmltcG9ydCBmZXRjaCBmcm9tICdub2RlLWZldGNoJztcbmltcG9ydCB7IFJlbW90ZUZpbGUgfSBmcm9tICdnZW5lcmljLWZpbGVoYW5kbGUnO1xuaW1wb3J0IE5DTGlzdCBmcm9tICdAZ21vZC9uY2xpc3QnO1xuaW1wb3J0IHsgZXhpdCB9IGZyb20gXCJwcm9jZXNzXCI7XG5cblxuZnVuY3Rpb24gUGFyc2VJbnQodmFsdWU6IGFueSkge1xuICAvLyBwYXJzZUludCB0YWtlcyBhIHN0cmluZyBhbmQgYSByYWRpeFxuICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIGlmIChpc05hTihwYXJzZWRWYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ05vdCBhIG51bWJlci4nKTtcbiAgfVxuICByZXR1cm4gcGFyc2VkVmFsdWU7XG59XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xucHJvZ3JhbVxuICAudmVyc2lvbihcIjEuMC4wXCIpXG4gIC5kZXNjcmlwdGlvbihcbiAgICBgJHtmaWdsZXQudGV4dFN5bmMoXCJKQnJvd3NlIE5DTGlzdFwiKX1cXG5BIHdyYXBwZXIgYXJvdW5kIGdtb2QvbmNsaXN0LWpzLiBJdCByZXR1cm5zIEpTT04gZm9yIGdlbmVyYXRpbmcgY3Jvc3MgcmVmZXJlbmNlcyB0byBKQnJvd3NlIGZlYXR1cmVzYClcbiAgLnJlcXVpcmVkT3B0aW9uKFwiLWIsIC0tYmFzZXVybCAgPHZhbHVlPlwiLCBcIlBhdGggdG8gSkJyb3dzZSBEYXRhIERpcmVjdG9yeSAtIGJhc2UgVVJMIGZvciByZXNvbHZpbmcgcmVsYXRpdmUgVVJMc1wiKVxuICAucmVxdWlyZWRPcHRpb24oXCItdCwgLS10ZW1wbGF0ZSA8dmFsdWU+XCIsIFwiVVJMIFRlbXBsYXRlXCIpXG4gIC5yZXF1aXJlZE9wdGlvbihcIi1yLCAtLXJlZnNlcSA8dmFsdWU+XCIsIFwiVGhlIFNlcXVlbmNlIG5hbWVcIilcbiAgLnJlcXVpcmVkT3B0aW9uKFwiLXMsIC0tc3RhcnQgPGludGVnZXI+XCIsIFwic3RhcnQgcG9zaXRpb25cIiwgUGFyc2VJbnQpXG4gIC5yZXF1aXJlZE9wdGlvbihcIi1lLCAtLWVuZCA8aW50ZWdlcj5cIiwgXCJlbmQgcG9zaXRpb25cIiwgUGFyc2VJbnQpXG4gIC5vcHRpb24oXCItZCwgLS1kaXNwbGF5bmFtZSBbc3RyaW5nXVwiLCBcImpicm93c2UgZGlzcGxheW5hbWUgZmllbGRzXCIsIFwiYWxpYXNcIilcbiAgLm9wdGlvbihcIi1pLCAtLXNlcWlkIFtzdHJpbmddXCIsIFwidGhlIHNlcXVlbmNlIG5hbWUgZm9yIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmVhdHVyZXNcIiwgXCJzZXFfaWRcIilcbiAgLm9wdGlvbihcIi1uLCAtLWlkbmFtZSBbc3RyaW5nXVwiLCBcInRoZSBzZXF1ZW5jZSBpZGVudGlmaWVyIG9mIHRoZSBmZWF0dXJlc1wiLCBcIm5hbWVcIilcbiAgLm9wdGlvbihcIi12LCAtLXZlcmJvc2VcIiwgXCJGb3IgZGVidWdpZ25nIHB1cnBvc2VzXCIpXG4gIC5wYXJzZShwcm9jZXNzLmFyZ3YpO1xuXG5jb25zdCBvcHRpb25zID0gcHJvZ3JhbS5vcHRzKCk7XG5cbmlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgY29uc29sZS5sb2coXCJPcHRpb25zOlwiKVxuICBjb25zb2xlLmxvZyhvcHRpb25zKVxufVxuXG5cbi8vIHNjb3R0IHNheXMgbWFrZSBhbGlhcyBhbmQgbmFtZSBjb25maWd1cmFibGVcbmZ1bmN0aW9uIGVuY29kZUdlbmUoZmVhdHVyZTogYW55KSB7XG4gIHZhciBkaXNwbGF5X25hbWU6IHN0cmluZyA9IChBcnJheS5pc0FycmF5KGZlYXR1cmUuZ2V0KG9wdGlvbnMuZGlzcGxheW5hbWUpKSk/IGZlYXR1cmUuZ2V0KG9wdGlvbnMuZGlzcGxheW5hbWUpWzBdIDogZmVhdHVyZS5nZXQob3B0aW9ucy5kaXNwbGF5bmFtZSk7XG4gIHZhciBpZF9uYW1lOiBzdHJpbmcgPSAoQXJyYXkuaXNBcnJheShmZWF0dXJlLmdldChvcHRpb25zLmlkbmFtZSkpKT8gZmVhdHVyZS5nZXQob3B0aW9ucy5pZG5hbWUpWzBdIDogZmVhdHVyZS5nZXQob3B0aW9ucy5pZG5hbWUpO1xuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uOiBgJHtmZWF0dXJlLmdldChvcHRpb25zLnNlcWlkKX06JHtmZWF0dXJlLmdldCgnc3RhcnQnKX0tJHtmZWF0dXJlLmdldCgnZW5kJyl9YCxcbiAgICBkaXNwbGF5X25hbWU6IGRpc3BsYXlfbmFtZSxcbiAgICBpZDogaWRfbmFtZVxuICB9O1xufVxuXG47KGFzeW5jICgpID0+IHtcbiAgY29uc3Qgc3RvcmUgPSBuZXcgTkNMaXN0KHtcbiAgICBiYXNlVXJsOiBvcHRpb25zLmJhc2V1cmwsXG4gICAgdXJsVGVtcGxhdGU6IG9wdGlvbnMudGVtcGxhdGUsXG4gICAgcmVhZEZpbGU6ICh1cmw6IHN0cmluZykgPT4gbmV3IFJlbW90ZUZpbGUodXJsLCB7ZmV0Y2g6IGZldGNoIGFzIGFueSBhcyBGZXRjaGVyfSkucmVhZEZpbGUoKSxcbiAgfSlcbiAgdmFyIGdlbmVzID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCBmZWF0dXJlIG9mIHN0b3JlLmdldEZlYXR1cmVzKHtcbiAgICByZWZOYW1lOiBvcHRpb25zLnJlZnNlcSxcbiAgICBzdGFydDogb3B0aW9ucy5zdGFydCxcbiAgICBlbmQ6IG9wdGlvbnMuZW5kLFxuICB9KSkge1xuICAgIGdlbmVzLnB1c2goZW5jb2RlR2VuZShmZWF0dXJlKSk7XG4gIH1cbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZ2VuZXMpKTtcbn0pKCk7XG4iXX0=