cli.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. "use strict";
  2. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  3. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  4. return new (P || (P = Promise))(function (resolve, reject) {
  5. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  6. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  7. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  8. step((generator = generator.apply(thisArg, _arguments || [])).next());
  9. });
  10. };
  11. var __importDefault = (this && this.__importDefault) || function (mod) {
  12. return (mod && mod.__esModule) ? mod : { "default": mod };
  13. };
  14. Object.defineProperty(exports, "__esModule", { value: true });
  15. const chalk_1 = __importDefault(require("chalk"));
  16. const _1 = require(".");
  17. const blessed_1 = __importDefault(require("blessed"));
  18. const formatSeq = (seq) => {
  19. return seq.split('').map(c => {
  20. let r;
  21. switch (c) {
  22. case 'A':
  23. r = chalk_1.default.green(c);
  24. break;
  25. case 'T':
  26. r = chalk_1.default.red(c);
  27. break;
  28. case 'C':
  29. r = chalk_1.default.blue(c);
  30. break;
  31. case 'G':
  32. r = chalk_1.default.yellow(c);
  33. break;
  34. case '.':
  35. //r = chalk.hex('#FF0000').bgBlue(' ')
  36. // r = chalk.bgHex('#DEADED').underline(' ')
  37. // break;
  38. r = c;
  39. default:
  40. r = c;
  41. break;
  42. }
  43. return r;
  44. }).join('');
  45. };
  46. const combineSTr = (strings, lineN) => {
  47. const splittedSts = [];
  48. const r = new RegExp(".{1," + lineN + "}", "g");
  49. for (const s of strings) {
  50. const tmpLines = s.match(r) || [];
  51. const resLines = [];
  52. for (const line of tmpLines)
  53. resLines.push(line.length < lineN ? line + ' '.repeat(lineN - line.length) : line);
  54. splittedSts.push(resLines);
  55. }
  56. const firstLines = splittedSts.shift() || [];
  57. return firstLines.map((e, i) => formatSeq(e.toUpperCase()) + formatSeq(splittedSts.map(ee => ee[i]).join(''))).join('');
  58. };
  59. (() => __awaiter(void 0, void 0, void 0, function* () {
  60. const arg = process.argv.slice(2);
  61. console.log(chalk_1.default.blue('Welcome to gbffParser!'));
  62. if (arg.length === 0 || arg.length > 1) {
  63. console.log(chalk_1.default.red('Usage : cli.js <Accession>'));
  64. }
  65. else {
  66. var screen = blessed_1.default.screen({
  67. smartCSR: true
  68. });
  69. screen.title = 'gbffParser';
  70. //blessed.text({})
  71. var box = blessed_1.default.box({
  72. top: 'center',
  73. left: 'center',
  74. width: '95%',
  75. height: '95%',
  76. content: 'Hello {bold}world{/bold}!',
  77. tags: true,
  78. border: {
  79. type: 'line'
  80. },
  81. scrollable: true,
  82. scrollbar: {
  83. style: { bg: 'blue' },
  84. },
  85. keys: true,
  86. mouse: false,
  87. style: {
  88. fg: 'white',
  89. bg: 'black',
  90. border: {
  91. fg: '#f0f0f0'
  92. }
  93. }
  94. });
  95. screen.append(box);
  96. screen.key(['escape', 'q', 'C-c'], (ch, key) => {
  97. return process.exit(0);
  98. });
  99. const dbPath = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(n => '/home/thomas/NGS/ref/RNA/human.' + n + '.rna.gbff');
  100. const result = yield (0, _1.getFromAcc)(arg[0], dbPath);
  101. // console.log(result)
  102. if (result) {
  103. box.setContent(result.sequence);
  104. box.focus();
  105. const lineN = box.getScreenLines()[0].length;
  106. box.setContent(combineSTr([result.sequence, result.sequence.split('').map(e => '.').join('')], lineN));
  107. screen.render();
  108. }
  109. }
  110. }))();