Thomas 3 سال پیش
والد
کامیت
0aa14d7f20
3فایلهای تغییر یافته به همراه39 افزوده شده و 2 حذف شده
  1. 1 0
      .gitignore
  2. 18 1
      index.js
  3. 20 1
      index.ts

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+node_modules

+ 18 - 1
index.js

@@ -12,12 +12,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
     return (mod && mod.__esModule) ? mod : { "default": mod };
 };
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.asyncReadSmallFasta = exports.asyncReadFasta = void 0;
+exports.selectFasta = exports.asyncReadSmallFasta = exports.asyncReadFasta = void 0;
 const child_process_1 = require("child_process");
 const fs_1 = __importDefault(require("fs"));
 const zlib = require('zlib');
 const readline = require('readline');
 const Papa = require('papaparse');
+const async_exec = (prog, args, onData) => {
+    return new Promise((resolve, reject) => {
+        const child = (0, child_process_1.spawn)(prog, args, { shell: true });
+        child.stdout.on('data', data => onData(data.toString().trim()));
+        child.stderr.on('data', data => onData(data.toString().trim()));
+        child.on('error', err => reject(err));
+        child.on('exit', code => resolve(code));
+    });
+};
 // Read fasta/fa/fna
 const asyncReadSmallFasta = (path) => {
     return new Promise((resolve, reject) => {
@@ -126,3 +135,11 @@ const asyncReadFasta = (path, sequences) => {
     }));
 };
 exports.asyncReadFasta = asyncReadFasta;
+const selectFasta = (path, name, out) => {
+    return new Promise((resolve, reject) => __awaiter(void 0, void 0, void 0, function* () {
+        if (!Array.isArray(name))
+            name = [name];
+        yield async_exec('samtools', ['faidx', path, ...name, '>', out], console.log);
+    }));
+};
+exports.selectFasta = selectFasta;

+ 20 - 1
index.ts

@@ -5,6 +5,18 @@ const zlib = require('zlib')
 const readline = require('readline')
 const Papa     = require('papaparse')
 
+const async_exec = (prog: string, args: string[], onData: Function) => {
+    return new Promise((resolve, reject) => {
+        const child = spawn(prog, args, {shell: true})
+
+        child.stdout.on('data', data => onData(data.toString().trim()))
+        child.stderr.on('data', data => onData(data.toString().trim()))
+
+        child.on('error', err => reject(err))
+        child.on('exit', code => resolve(code))
+    })
+}
+
 // Read fasta/fa/fna
 const asyncReadSmallFasta = (path: string) => {
   return new Promise<any[]>((resolve, reject) => {
@@ -111,4 +123,11 @@ const asyncReadFasta = (path: string, sequences: string[] | string) => {
   })
 }
 
-export { asyncReadFasta, asyncReadSmallFasta }
+const selectFasta = (path:string, name: string[] | string, out:string) => {
+    return new Promise<string>(async (resolve, reject) => {
+        if(!Array.isArray(name)) name = [name]
+        await async_exec('samtools', ['faidx', path, ...name, '>', out], console.log)
+    })
+}
+
+export { asyncReadFasta, asyncReadSmallFasta, selectFasta }