export default async function parseCoordinates()

in client/client/app/shared/components/ngbGoldenLayout/ngbCoordinates/parse-coordinates.js [120:217]


export default async function parseCoordinates (
    string,
    projectContext,
    currentChromosomeName,
    searchResultsCache = [],
    projectDataService,
    referenceId
) {
    if (!string) {
        return [];
    }
    let rest = string.slice();
    const coordinates = [];
    let currentChromosome = getChromosome(currentChromosomeName, projectContext);
    do {
        const chrStartEnd = CHR_START_END_regExp.exec(rest);
        const chrPosition = CHR_POSITION_regExp.exec(rest);
        const chr = CHR_regExp.exec(rest);
        const startEnd = START_END_regExp.exec(rest);
        const position = POSITION_regExp.exec(rest);
        const feature = FEATURE_regExp.exec(rest);
        const matchedRegExp = chrStartEnd ||
            chrPosition ||
            chr ||
            startEnd ||
            position ||
            feature;
        if (chrStartEnd) {
            const [, chrName, start, end] = chrStartEnd;
            const chromosome = getChromosome(chrName, projectContext);
            const viewport = {
                start: correctPosition(chromosome, start),
                end: correctPosition(chromosome, end)
            };
            if (chromosome && viewport.start && viewport.end) {
                coordinates.push({chromosome, viewport});
                currentChromosome = chromosome;
            }
        } else if (chrPosition) {
            const [, chrName, _position] = chrPosition;
            const chromosome = getChromosome(chrName, projectContext);
            const positionPayload = correctPosition(chromosome, _position);
            const viewport = getViewportByPosition(_position, chromosome);
            if (chromosome && viewport.start && viewport.end) {
                coordinates.push({chromosome, viewport});
                currentChromosome = chromosome;
            } else if (chromosome && positionPayload) {
                coordinates.push({chromosome, position: positionPayload});
                currentChromosome = chromosome;
            }
        } else if (chr) {
            const [, chrName] = chr;
            const chromosome = getChromosome(chrName, projectContext);
            if (chromosome) {
                const viewport = {
                    start: 1,
                    end: currentChromosome.size
                };
                coordinates.push({chromosome, viewport});
                currentChromosome = chromosome;
            }
        } else if (startEnd && currentChromosome) {
            const [, start, end] = startEnd;
            const viewport = {
                start: correctPosition(currentChromosome, start),
                end: correctPosition(currentChromosome, end)
            };
            if (viewport.start && viewport.end) {
                coordinates.push({chromosome: currentChromosome, viewport});
            }
        } else if (position && currentChromosome) {
            const [, _position] = position;
            const positionPayload = correctPosition(currentChromosome, _position);
            const viewport = getViewportByPosition(_position, currentChromosome);
            if (viewport.start && viewport.end) {
                coordinates.push({chromosome: currentChromosome, viewport});
            } else if (positionPayload) {
                coordinates.push({chromosome: currentChromosome, position: positionPayload});
            }
        } else if (feature) {
            const featureNavigation = await findFeature(
                feature[1],
                searchResultsCache,
                projectDataService,
                referenceId
            );
            if (featureNavigation) {
                coordinates.push(featureNavigation);
            }
        }
        if (matchedRegExp) {
            rest = rest.slice(matchedRegExp.index + matchedRegExp[0].length);
        } else {
            rest = undefined;
        }
    } while (rest);
    return coordinates;
}