UNPKG

@gmod/vcf

Version:

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

75 lines 2.51 kB
export function parseBreakend(breakendString) { const tokens = breakendString.split(/[[\]]/); if (tokens.length > 1) { const MateDirection = breakendString.includes('[') ? 'right' : 'left'; let Join; let Replacement; let MatePosition; for (const tok of tokens) { if (tok) { if (tok.includes(':')) { // this is the remote location MatePosition = tok; Join = Replacement ? 'right' : 'left'; } else { // this is the local alteration Replacement = tok; } } } if (!(MatePosition && Join && Replacement)) { throw new Error(`Invalid breakend: ${breakendString}`); } return { MatePosition, Join, Replacement, MateDirection }; } else { if (breakendString.startsWith('.')) { return { Join: 'left', SingleBreakend: true, Replacement: breakendString.slice(1), }; } else if (breakendString.endsWith('.')) { return { Join: 'right', SingleBreakend: true, Replacement: breakendString.slice(0, -1), }; } else if (breakendString.startsWith('<')) { const res = /<(.*)>(.*)/.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; } else if (breakendString.includes('<')) { const res = /(.*)<(.*)>/.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; } export { default } from "./parse.js"; //# sourceMappingURL=index.js.map