🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@gmod/vcf

Package Overview
Dependencies
Maintainers
4
Versions
48
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@gmod/vcf - npm Package Compare versions

Comparing version
7.0.8
to
7.0.9
+0
-10
dist/processGenotypes.d.ts

@@ -7,12 +7,2 @@ /**

export type GenotypeCallback = (str: string, start: number, end: number, sampleIdx: number) => unknown;
/**
* Process genotypes by calling a callback for each one, avoiding intermediate
* object/string allocation. This is useful for operations like counting alleles
* where you don't need to build the full genotypes object.
*
* @param format - The FORMAT field from the VCF line
* @param prerest - The sample data portion of the VCF line (after FORMAT)
* @param samplesLen - Number of samples
* @param callback - Called for each genotype with (string, startIndex, endIndex)
*/
export declare function processGenotypes(format: string, prerest: string, samplesLen: number, callback: GenotypeCallback): void;
+28
-13

@@ -14,6 +14,28 @@ "use strict";

*/
const TAB = 9;
const COLON = 58;
const G = 71;
const T = 84;
// Column index of the exact "GT" field among the colon-separated FORMAT
// keys, or -1 if absent. Matches the field exactly so keys that merely
// contain "GT" (e.g. GATK's PGT) are not mistaken for it.
function gtColumnIndex(format) {
let col = 0;
let start = 0;
const len = format.length;
for (let j = 0; j <= len; j++) {
if (j === len || format.charCodeAt(j) === COLON) {
if (j - start === 2 &&
format.charCodeAt(start) === G &&
format.charCodeAt(start + 1) === T) {
return col;
}
col++;
start = j + 1;
}
}
return -1;
}
function processGenotypes(format, prerest, samplesLen, callback) {
const prerestLen = prerest.length;
const TAB = 9;
const COLON = 58;
let pos = 0;

@@ -32,9 +54,8 @@ // Fast path: format is exactly "GT"

}
// Check if GT field exists
const gtIdx = format.indexOf('GT');
if (gtIdx === -1) {
const colonCount = gtColumnIndex(format);
if (colonCount === -1) {
return;
}
// GT is first field but not only field
if (gtIdx === 0) {
if (colonCount === 0) {
for (let idx = 0; idx < samplesLen; idx++) {

@@ -55,9 +76,3 @@ const start = pos;

}
// GT is not first field - need to skip to the right column
let colonCount = 0;
for (let j = 0; j < gtIdx; j++) {
if (format.charCodeAt(j) === COLON) {
colonCount++;
}
}
// GT is not first field - skip to its column (colonCount fields precede it)
for (let idx = 0; idx < samplesLen; idx++) {

@@ -64,0 +79,0 @@ const sampleStart = pos;

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

{"version":3,"file":"processGenotypes.js","sourceRoot":"","sources":["../src/processGenotypes.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"processGenotypes.js","sourceRoot":"","sources":["../src/processGenotypes.ts"],"names":[],"mappings":"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"}

@@ -7,12 +7,2 @@ /**

export type GenotypeCallback = (str: string, start: number, end: number, sampleIdx: number) => unknown;
/**
* Process genotypes by calling a callback for each one, avoiding intermediate
* object/string allocation. This is useful for operations like counting alleles
* where you don't need to build the full genotypes object.
*
* @param format - The FORMAT field from the VCF line
* @param prerest - The sample data portion of the VCF line (after FORMAT)
* @param samplesLen - Number of samples
* @param callback - Called for each genotype with (string, startIndex, endIndex)
*/
export declare function processGenotypes(format: string, prerest: string, samplesLen: number, callback: GenotypeCallback): void;

@@ -11,6 +11,28 @@ /**

*/
const TAB = 9;
const COLON = 58;
const G = 71;
const T = 84;
// Column index of the exact "GT" field among the colon-separated FORMAT
// keys, or -1 if absent. Matches the field exactly so keys that merely
// contain "GT" (e.g. GATK's PGT) are not mistaken for it.
function gtColumnIndex(format) {
let col = 0;
let start = 0;
const len = format.length;
for (let j = 0; j <= len; j++) {
if (j === len || format.charCodeAt(j) === COLON) {
if (j - start === 2 &&
format.charCodeAt(start) === G &&
format.charCodeAt(start + 1) === T) {
return col;
}
col++;
start = j + 1;
}
}
return -1;
}
export function processGenotypes(format, prerest, samplesLen, callback) {
const prerestLen = prerest.length;
const TAB = 9;
const COLON = 58;
let pos = 0;

@@ -29,9 +51,8 @@ // Fast path: format is exactly "GT"

}
// Check if GT field exists
const gtIdx = format.indexOf('GT');
if (gtIdx === -1) {
const colonCount = gtColumnIndex(format);
if (colonCount === -1) {
return;
}
// GT is first field but not only field
if (gtIdx === 0) {
if (colonCount === 0) {
for (let idx = 0; idx < samplesLen; idx++) {

@@ -52,9 +73,3 @@ const start = pos;

}
// GT is not first field - need to skip to the right column
let colonCount = 0;
for (let j = 0; j < gtIdx; j++) {
if (format.charCodeAt(j) === COLON) {
colonCount++;
}
}
// GT is not first field - skip to its column (colonCount fields precede it)
for (let idx = 0; idx < samplesLen; idx++) {

@@ -61,0 +76,0 @@ const sampleStart = pos;

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

{"version":3,"file":"processGenotypes.js","sourceRoot":"","sources":["../src/processGenotypes.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"processGenotypes.js","sourceRoot":"","sources":["../src/processGenotypes.ts"],"names":[],"mappings":"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"}
{
"name": "@gmod/vcf",
"version": "7.0.8",
"version": "7.0.9",
"description": "High performance streaming Variant Call Format (VCF) parser in pure JavaScript",

@@ -5,0 +5,0 @@ "type": "module",

@@ -6,3 +6,3 @@ # vcf-js

[![NPM version](https://img.shields.io/npm/v/@gmod/vcf.svg?logo=npm&style=flat-square)](https://npmjs.org/package/@gmod/vcf)
[![Build Status](https://img.shields.io/github/actions/workflow/status/GMOD/vcf-js/publish.yml?branch=main)](https://github.com/GMOD/vcf-js/actions)
![Build Status](https://img.shields.io/github/actions/workflow/status/GMOD/vcf-js/publish.yml?branch=main)

@@ -9,0 +9,0 @@ ## Usage

@@ -23,2 +23,30 @@ /**

*/
const TAB = 9
const COLON = 58
const G = 71
const T = 84
// Column index of the exact "GT" field among the colon-separated FORMAT
// keys, or -1 if absent. Matches the field exactly so keys that merely
// contain "GT" (e.g. GATK's PGT) are not mistaken for it.
function gtColumnIndex(format: string) {
let col = 0
let start = 0
const len = format.length
for (let j = 0; j <= len; j++) {
if (j === len || format.charCodeAt(j) === COLON) {
if (
j - start === 2 &&
format.charCodeAt(start) === G &&
format.charCodeAt(start + 1) === T
) {
return col
}
col++
start = j + 1
}
}
return -1
}
export function processGenotypes(

@@ -31,4 +59,2 @@ format: string,

const prerestLen = prerest.length
const TAB = 9
const COLON = 58
let pos = 0

@@ -49,5 +75,4 @@

// Check if GT field exists
const gtIdx = format.indexOf('GT')
if (gtIdx === -1) {
const colonCount = gtColumnIndex(format)
if (colonCount === -1) {
return

@@ -57,3 +82,3 @@ }

// GT is first field but not only field
if (gtIdx === 0) {
if (colonCount === 0) {
for (let idx = 0; idx < samplesLen; idx++) {

@@ -77,10 +102,3 @@ const start = pos

// GT is not first field - need to skip to the right column
let colonCount = 0
for (let j = 0; j < gtIdx; j++) {
if (format.charCodeAt(j) === COLON) {
colonCount++
}
}
// GT is not first field - skip to its column (colonCount fields precede it)
for (let idx = 0; idx < samplesLen; idx++) {

@@ -87,0 +105,0 @@ const sampleStart = pos