UNPKG

@gmod/vcf

Version:

High performance streaming Variant Call Format (VCF) parser in pure JavaScript

80 lines 2.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseBreakend = parseBreakend; const ANGLE_BRACKET_START_REGEX = /<(.*)>(.*)/; const ANGLE_BRACKET_END_REGEX = /(.*)<(.*)>/; function parseBreakend(breakendString) { const firstChar = breakendString[0]; const lastChar = breakendString.at(-1); if (firstChar === '[' || firstChar === ']' || lastChar === '[' || lastChar === ']') { const tokens = breakendString.split(/[[\]]/); const MateDirection = breakendString.includes('[') ? 'right' : 'left'; let Join; let Replacement; let MatePosition; for (const tok of tokens) { if (tok) { if (tok.includes(':')) { MatePosition = tok; Join = Replacement ? 'right' : 'left'; } else { Replacement = tok; } } } if (!(MatePosition && Join && Replacement)) { throw new Error(`Invalid breakend: ${breakendString}`); } return { MatePosition, Join, Replacement, MateDirection }; } if (firstChar === '.') { return { Join: 'left', SingleBreakend: true, Replacement: breakendString.slice(1), }; } if (lastChar === '.') { return { Join: 'right', SingleBreakend: true, Replacement: breakendString.slice(0, -1), }; } if (firstChar === '<') { const res = ANGLE_BRACKET_START_REGEX.exec(breakendString); if (!res) { throw new Error(`failed to parse ${breakendString}`); } const Replacement = res[2]; return Replacement ? { Join: 'left', Replacement, MateDirection: 'right', MatePosition: `<${res[1] ?? ''}>:1`, } : undefined; } if (breakendString.includes('<')) { const res = ANGLE_BRACKET_END_REGEX.exec(breakendString); if (!res) { throw new Error(`failed to parse ${breakendString}`); } const Replacement = res[1]; return Replacement ? { Join: 'right', Replacement, MateDirection: 'right', MatePosition: `<${res[2] ?? ''}>:1`, } : undefined; } return undefined; } //# sourceMappingURL=parseBreakend.js.map