@teselagen/range-utils 0.3.6 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -0
- package/flipContainedRange.d.ts +1 -1
- package/index.js +233 -85
- package/index.mjs +233 -85
- package/index.umd.js +233 -85
- package/package.json +1 -2
- package/src/adjustRangeToDeletionOfAnotherRange.test.js +166 -105
- package/src/adjustRangeToInsert.js +29 -26
- package/src/adjustRangeToInsert.test.js +197 -109
- package/src/adjustRangeToRotation.js +4 -5
- package/src/adjustRangeToRotation.test.js +203 -119
- package/src/checkIfNonCircularRangesOverlap.js +18 -15
- package/src/checkIfNonCircularRangesOverlap.test.js +67 -42
- package/src/checkIfPotentiallyCircularRangesOverlap.js +22 -12
- package/src/checkIfPotentiallyCircularRangesOverlap.test.js +115 -70
- package/src/collapseOverlapsGeneratedFromRangeComparisonIfPossible.js +72 -41
- package/src/collapseOverlapsGeneratedFromRangeComparisonIfPossible.test.js +183 -84
- package/src/convertRangeIndices.js +24 -20
- package/src/convertRangeIndices.test.js +40 -21
- package/src/convertRangeTo0Based.js +7 -4
- package/src/convertRangeTo1Based.js +8 -4
- package/src/doesRangeSpanEntireSequence.js +4 -4
- package/src/doesRangeSpanOrigin.js +3 -3
- package/src/expandOrContractCircularRangeToPosition.js +45 -38
- package/src/expandOrContractNonCircularRangeToPosition.js +24 -21
- package/src/expandOrContractRangeByLength.js +16 -11
- package/src/expandOrContractRangeByLength.test.js +109 -71
- package/src/expandOrContractRangeToPosition.js +17 -9
- package/src/flipContainedRange.js +133 -72
- package/src/flipContainedRange.test.js +143 -117
- package/src/generateRandomRange.js +17 -15
- package/src/generateRandomRange.test.js +21 -21
- package/src/getAnnotationRangeType.js +25 -21
- package/src/getAnnotationRangeType.test.js +56 -57
- package/src/getEachPositionInRangeAsArray.js +13 -13
- package/src/getEachPositionInRangeAsArray.test.js +12 -8
- package/src/getLengthOfOverlappingRegionsBetweenTwoRanges.js +16 -8
- package/src/getLengthOfOverlappingRegionsBetweenTwoRanges.test.js +32 -24
- package/src/getMiddleOfRange.js +1 -1
- package/src/getMiddleOfRange.test.js +5 -13
- package/src/getOverlapOfNonCircularRanges.js +30 -30
- package/src/getOverlapsOfPotentiallyCircularRanges.js +5 -5
- package/src/getOverlapsOfPotentiallyCircularRanges.test.js +3 -23
- package/src/getPositionFromAngle.js +12 -7
- package/src/getRangeAngles.js +1 -1
- package/src/getRangeAngles.test.js +10 -11
- package/src/getRangeLength.test.js +5 -5
- package/src/getRangesBetweenTwoRanges.js +31 -22
- package/src/getSequenceWithinRange.js +13 -13
- package/src/getSequenceWithinRange.test.js +43 -45
- package/src/getShortestDistanceBetweenTwoPositions.js +10 -6
- package/src/getShortestDistanceBetweenTwoPositions.test.js +11 -13
- package/src/getYOffsetForPotentiallyCircularRange.js +33 -21
- package/src/getYOffsetsForPotentiallyCircularRanges.js +26 -19
- package/src/getYOffsetsForPotentiallyCircularRanges.test.js +42 -29
- package/src/getZeroedRangeOverlaps.js +30 -15
- package/src/getZeroedRangeOverlaps.test.js +75 -36
- package/src/index.js +51 -51
- package/src/index.test.js +6 -8
- package/src/invertRange.test.js +103 -93
- package/src/isPositionCloserToRangeStartThanRangeEnd.js +18 -6
- package/src/isPositionCloserToRangeStartThanRangeEnd.test.js +36 -16
- package/src/isPositionWithinRange.js +4 -4
- package/src/isRangeOrPositionWithinRange.js +18 -12
- package/src/isRangeOrPositionWithinRange.test.js +6 -6
- package/src/isRangeWithinRange.js +2 -3
- package/src/loopEachPositionInRange.js +3 -3
- package/src/modulatePositionByRange.js +8 -8
- package/src/modulatePositionByRange.test.js +10 -11
- package/src/modulateRangeBySequenceLength.js +7 -7
- package/src/modulateRangeBySequenceLength.test.js +39 -16
- package/src/normalizePositionByRangeLength.js +22 -18
- package/src/normalizePositionByRangeLength.test.js +23 -23
- package/src/normalizePositionByRangeLength1Based.js +7 -4
- package/src/normalizePositionByRangeLength1Based.test.js +9 -9
- package/src/normalizeRange.js +7 -7
- package/src/normalizeRange.test.js +9 -9
- package/src/provideInclusiveOptions.js +36 -23
- package/src/reversePositionInRange.js +16 -12
- package/src/splitRangeIntoTwoPartsIfItIsCircular.js +31 -28
- package/src/splitRangeIntoTwoPartsIfItIsCircular.test.js +22 -11
- package/src/translateRange.js +18 -8
- package/src/translateRange.test.js +18 -19
- package/src/trimNonCicularRangeByAnotherNonCircularRange.js +45 -42
- package/src/trimNumberToFitWithin0ToAnotherNumber.js +13 -10
- package/src/trimRangeByAnotherRange.js +20 -19
- package/src/trimRangeByAnotherRange.test.js +6 -6
- package/src/zeroSubrangeByContainerRange.js +29 -19
- package/src/zeroSubrangeByContainerRange.test.js +57 -47
package/index.umd.js
CHANGED
@@ -6049,8 +6049,8 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6049
6049
|
maxRangeLength
|
6050
6050
|
);
|
6051
6051
|
let overlaps = [];
|
6052
|
-
normalizedRangeA.forEach(function(nonCircularRangeA
|
6053
|
-
normalizedRangeB.forEach(function(nonCircularRangeB
|
6052
|
+
normalizedRangeA.forEach(function(nonCircularRangeA) {
|
6053
|
+
normalizedRangeB.forEach(function(nonCircularRangeB) {
|
6054
6054
|
const overlap = getOverlapOfNonCircularRanges(
|
6055
6055
|
nonCircularRangeA,
|
6056
6056
|
nonCircularRangeB
|
@@ -6062,7 +6062,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6062
6062
|
});
|
6063
6063
|
if (joinIfPossible && normalizedRangeA.length === 2 && normalizedRangeB.length === 2 && maxRangeLength) {
|
6064
6064
|
const joinedOverlap = {};
|
6065
|
-
overlaps = lodashExports.flatMap(overlaps, (o
|
6065
|
+
overlaps = lodashExports.flatMap(overlaps, (o) => {
|
6066
6066
|
if (o.start === 0) {
|
6067
6067
|
joinedOverlap.end = o.end;
|
6068
6068
|
return [];
|
@@ -6160,12 +6160,14 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6160
6160
|
});
|
6161
6161
|
splitRangesToBeTrimmed[index] = nonCircularRangeToBeTrimmed;
|
6162
6162
|
});
|
6163
|
-
const outputSplitRanges = splitRangesToBeTrimmed.filter(
|
6164
|
-
|
6165
|
-
|
6163
|
+
const outputSplitRanges = splitRangesToBeTrimmed.filter(
|
6164
|
+
function(trimmedRange) {
|
6165
|
+
if (trimmedRange) {
|
6166
|
+
return true;
|
6167
|
+
}
|
6168
|
+
return false;
|
6166
6169
|
}
|
6167
|
-
|
6168
|
-
});
|
6170
|
+
);
|
6169
6171
|
let outputTrimmedRange;
|
6170
6172
|
if (outputSplitRanges.length < 0)
|
6171
6173
|
;
|
@@ -6264,11 +6266,19 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6264
6266
|
}
|
6265
6267
|
__name(checkIfNonCircularRangesOverlap, "checkIfNonCircularRangesOverlap");
|
6266
6268
|
function checkIfPotentiallyCircularRangesOverlap(range, comparisonRange) {
|
6267
|
-
return splitRangeIntoTwoPartsIfItIsCircular(range, Infinity).some(
|
6268
|
-
|
6269
|
-
return
|
6270
|
-
|
6271
|
-
|
6269
|
+
return splitRangeIntoTwoPartsIfItIsCircular(range, Infinity).some(
|
6270
|
+
function(splitRange) {
|
6271
|
+
return splitRangeIntoTwoPartsIfItIsCircular(
|
6272
|
+
comparisonRange,
|
6273
|
+
Infinity
|
6274
|
+
).some(function(splitComparisonRange) {
|
6275
|
+
return checkIfNonCircularRangesOverlap(
|
6276
|
+
splitRange,
|
6277
|
+
splitComparisonRange
|
6278
|
+
);
|
6279
|
+
});
|
6280
|
+
}
|
6281
|
+
);
|
6272
6282
|
}
|
6273
6283
|
__name(checkIfPotentiallyCircularRangesOverlap, "checkIfPotentiallyCircularRangesOverlap");
|
6274
6284
|
function collapseOverlapsGeneratedFromRangeComparisonIfPossible(overlaps, sequenceLength, optionalOriginalRange) {
|
@@ -6277,15 +6287,19 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6277
6287
|
return overlaps;
|
6278
6288
|
} else if (overlaps.length === 2) {
|
6279
6289
|
if (overlaps[0].start === 0 && overlaps[1].end + 1 === sequenceLength && !originalRangeLinear) {
|
6280
|
-
return [
|
6281
|
-
|
6282
|
-
|
6283
|
-
|
6290
|
+
return [
|
6291
|
+
{
|
6292
|
+
start: overlaps[1].start,
|
6293
|
+
end: overlaps[0].end
|
6294
|
+
}
|
6295
|
+
];
|
6284
6296
|
} else if (overlaps[1].start === 0 && overlaps[0].end + 1 === sequenceLength && !originalRangeLinear) {
|
6285
|
-
return [
|
6286
|
-
|
6287
|
-
|
6288
|
-
|
6297
|
+
return [
|
6298
|
+
{
|
6299
|
+
start: overlaps[0].start,
|
6300
|
+
end: overlaps[1].end
|
6301
|
+
}
|
6302
|
+
];
|
6289
6303
|
} else {
|
6290
6304
|
return overlaps;
|
6291
6305
|
}
|
@@ -6293,17 +6307,29 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6293
6307
|
const firstOverlap = overlaps[0];
|
6294
6308
|
const secondOverlap = overlaps[1];
|
6295
6309
|
const thirdOverlap = overlaps[2];
|
6296
|
-
let collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
6310
|
+
let collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
6311
|
+
[firstOverlap, secondOverlap],
|
6312
|
+
sequenceLength,
|
6313
|
+
optionalOriginalRange
|
6314
|
+
);
|
6297
6315
|
if (collapsedOverlaps.length === 1) {
|
6298
6316
|
collapsedOverlaps.push(thirdOverlap);
|
6299
6317
|
return collapsedOverlaps;
|
6300
6318
|
} else {
|
6301
|
-
collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
6319
|
+
collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
6320
|
+
[firstOverlap, thirdOverlap],
|
6321
|
+
sequenceLength,
|
6322
|
+
optionalOriginalRange
|
6323
|
+
);
|
6302
6324
|
if (collapsedOverlaps.length === 1) {
|
6303
6325
|
collapsedOverlaps.push(secondOverlap);
|
6304
6326
|
return collapsedOverlaps;
|
6305
6327
|
} else {
|
6306
|
-
collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
6328
|
+
collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
6329
|
+
[secondOverlap, thirdOverlap],
|
6330
|
+
sequenceLength,
|
6331
|
+
optionalOriginalRange
|
6332
|
+
);
|
6307
6333
|
if (collapsedOverlaps.length === 1) {
|
6308
6334
|
collapsedOverlaps.push(firstOverlap);
|
6309
6335
|
return collapsedOverlaps;
|
@@ -6325,11 +6351,18 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6325
6351
|
}
|
6326
6352
|
__name(convertRangeIndices, "convertRangeIndices");
|
6327
6353
|
function convertRangeTo0Based(range) {
|
6328
|
-
return convertRangeIndices(range, {
|
6354
|
+
return convertRangeIndices(range, {
|
6355
|
+
inclusive1BasedStart: true,
|
6356
|
+
inclusive1BasedEnd: true
|
6357
|
+
});
|
6329
6358
|
}
|
6330
6359
|
__name(convertRangeTo0Based, "convertRangeTo0Based");
|
6331
6360
|
function convertRangeTo1Based(range) {
|
6332
|
-
return convertRangeIndices(
|
6361
|
+
return convertRangeIndices(
|
6362
|
+
range,
|
6363
|
+
{},
|
6364
|
+
{ inclusive1BasedStart: true, inclusive1BasedEnd: true }
|
6365
|
+
);
|
6333
6366
|
}
|
6334
6367
|
__name(convertRangeTo1Based, "convertRangeTo1Based");
|
6335
6368
|
function provideInclusiveOptions(funToWrap) {
|
@@ -6444,7 +6477,11 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6444
6477
|
let endMoved = true;
|
6445
6478
|
if (range.end >= position) {
|
6446
6479
|
if (position + maxLength - range.start > range.end - position) {
|
6447
|
-
newRange.end = normalizePositionByRangeLength(
|
6480
|
+
newRange.end = normalizePositionByRangeLength(
|
6481
|
+
position - 1,
|
6482
|
+
maxLength,
|
6483
|
+
false
|
6484
|
+
);
|
6448
6485
|
} else {
|
6449
6486
|
newRange.start = position;
|
6450
6487
|
endMoved = false;
|
@@ -6517,19 +6554,32 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6517
6554
|
if (range.start > range.end) {
|
6518
6555
|
return expandOrContractCircularRangeToPosition(range, position, maxLength);
|
6519
6556
|
} else {
|
6520
|
-
return expandOrContractNonCircularRangeToPosition(
|
6557
|
+
return expandOrContractNonCircularRangeToPosition(
|
6558
|
+
range,
|
6559
|
+
position
|
6560
|
+
);
|
6521
6561
|
}
|
6522
6562
|
}
|
6523
6563
|
__name(expandOrContractRangeToPosition, "expandOrContractRangeToPosition");
|
6524
6564
|
function translateRange(rangeToBeAdjusted, translateBy, rangeLength) {
|
6525
6565
|
return lodashExports.assign({}, rangeToBeAdjusted, {
|
6526
|
-
start: normalizePositionByRangeLength(
|
6527
|
-
|
6566
|
+
start: normalizePositionByRangeLength(
|
6567
|
+
rangeToBeAdjusted.start + translateBy,
|
6568
|
+
rangeLength
|
6569
|
+
),
|
6570
|
+
end: normalizePositionByRangeLength(
|
6571
|
+
rangeToBeAdjusted.end + translateBy,
|
6572
|
+
rangeLength
|
6573
|
+
)
|
6528
6574
|
});
|
6529
6575
|
}
|
6530
6576
|
__name(translateRange, "translateRange");
|
6531
|
-
function flipRelativeRange(innerRange, outerRange, sequenceLength
|
6532
|
-
const isFullyContained = isRangeWithinRange(
|
6577
|
+
function flipRelativeRange(innerRange, outerRange, sequenceLength) {
|
6578
|
+
const isFullyContained = isRangeWithinRange(
|
6579
|
+
innerRange,
|
6580
|
+
outerRange,
|
6581
|
+
sequenceLength
|
6582
|
+
);
|
6533
6583
|
if (isFullyContained) {
|
6534
6584
|
return flipFullyContainedRange(innerRange, outerRange, sequenceLength);
|
6535
6585
|
} else {
|
@@ -6537,42 +6587,92 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6537
6587
|
}
|
6538
6588
|
}
|
6539
6589
|
__name(flipRelativeRange, "flipRelativeRange");
|
6540
|
-
function flipNonFullyContainedRange(innerRange, outerRange, sequenceLength
|
6541
|
-
const outerFullyContained = isRangeWithinRange(
|
6590
|
+
function flipNonFullyContainedRange(innerRange, outerRange, sequenceLength) {
|
6591
|
+
const outerFullyContained = isRangeWithinRange(
|
6592
|
+
outerRange,
|
6593
|
+
innerRange,
|
6594
|
+
sequenceLength
|
6595
|
+
);
|
6542
6596
|
let flippedInnerRange;
|
6543
6597
|
if (outerFullyContained) {
|
6544
|
-
const expandBy1 = getRangeLength(
|
6545
|
-
|
6546
|
-
|
6547
|
-
|
6548
|
-
|
6549
|
-
|
6550
|
-
|
6551
|
-
|
6552
|
-
|
6553
|
-
|
6598
|
+
const expandBy1 = getRangeLength(
|
6599
|
+
{
|
6600
|
+
start: innerRange.start,
|
6601
|
+
end: outerRange.start
|
6602
|
+
},
|
6603
|
+
sequenceLength
|
6604
|
+
) - 1;
|
6605
|
+
flippedInnerRange = expandOrContractRangeByLength(
|
6606
|
+
outerRange,
|
6607
|
+
expandBy1,
|
6608
|
+
false,
|
6609
|
+
sequenceLength
|
6610
|
+
);
|
6611
|
+
const expandBy2 = getRangeLength(
|
6612
|
+
{
|
6613
|
+
end: innerRange.end,
|
6614
|
+
start: outerRange.end
|
6615
|
+
},
|
6616
|
+
sequenceLength
|
6617
|
+
) - 1;
|
6618
|
+
flippedInnerRange = expandOrContractRangeByLength(
|
6619
|
+
flippedInnerRange,
|
6620
|
+
expandBy2,
|
6621
|
+
true,
|
6622
|
+
sequenceLength
|
6623
|
+
);
|
6554
6624
|
} else {
|
6555
|
-
const overlaps = getOverlapsOfPotentiallyCircularRanges(
|
6625
|
+
const overlaps = getOverlapsOfPotentiallyCircularRanges(
|
6626
|
+
innerRange,
|
6627
|
+
outerRange,
|
6628
|
+
sequenceLength
|
6629
|
+
);
|
6556
6630
|
if (overlaps.length >= 1) {
|
6557
|
-
let overlapExtendsForward;
|
6558
6631
|
const firstOverlap = overlaps[0];
|
6559
|
-
overlapExtendsForward = firstOverlap.start !== outerRange.start;
|
6560
|
-
const flippedTruncatedInner = flipFullyContainedRange(
|
6632
|
+
const overlapExtendsForward = firstOverlap.start !== outerRange.start;
|
6633
|
+
const flippedTruncatedInner = flipFullyContainedRange(
|
6634
|
+
firstOverlap,
|
6635
|
+
outerRange,
|
6636
|
+
sequenceLength
|
6637
|
+
);
|
6561
6638
|
const lengthToExtend = getRangeLength(innerRange, sequenceLength) - getRangeLength(flippedTruncatedInner, sequenceLength);
|
6562
|
-
flippedInnerRange = expandOrContractRangeByLength(
|
6639
|
+
flippedInnerRange = expandOrContractRangeByLength(
|
6640
|
+
flippedTruncatedInner,
|
6641
|
+
lengthToExtend,
|
6642
|
+
overlapExtendsForward,
|
6643
|
+
sequenceLength
|
6644
|
+
);
|
6563
6645
|
} else {
|
6564
|
-
throw new Error(
|
6646
|
+
throw new Error(
|
6647
|
+
"This case (relative ranges that do not overlap) is unsupported! "
|
6648
|
+
);
|
6565
6649
|
}
|
6566
6650
|
}
|
6567
6651
|
return flippedInnerRange;
|
6568
6652
|
}
|
6569
6653
|
__name(flipNonFullyContainedRange, "flipNonFullyContainedRange");
|
6570
|
-
function flipFullyContainedRange(innerRange, outerRange, sequenceLength
|
6654
|
+
function flipFullyContainedRange(innerRange, outerRange, sequenceLength) {
|
6571
6655
|
const translateBy = -outerRange.start;
|
6572
|
-
const translatedOuterRange = translateRange(
|
6573
|
-
|
6574
|
-
|
6575
|
-
|
6656
|
+
const translatedOuterRange = translateRange(
|
6657
|
+
outerRange,
|
6658
|
+
translateBy,
|
6659
|
+
sequenceLength
|
6660
|
+
);
|
6661
|
+
const translatedInnerRange = translateRange(
|
6662
|
+
innerRange,
|
6663
|
+
translateBy,
|
6664
|
+
sequenceLength
|
6665
|
+
);
|
6666
|
+
const translatedFlippedInnerRange = flipNonOriginSpanningContainedRange(
|
6667
|
+
translatedInnerRange,
|
6668
|
+
translatedOuterRange,
|
6669
|
+
sequenceLength
|
6670
|
+
);
|
6671
|
+
const flippedInnerRange = translateRange(
|
6672
|
+
translatedFlippedInnerRange,
|
6673
|
+
-translateBy,
|
6674
|
+
sequenceLength
|
6675
|
+
);
|
6576
6676
|
return flippedInnerRange;
|
6577
6677
|
}
|
6578
6678
|
__name(flipFullyContainedRange, "flipFullyContainedRange");
|
@@ -6590,7 +6690,10 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6590
6690
|
const start = getRandomInt(minStart, maxEnd);
|
6591
6691
|
let end;
|
6592
6692
|
if (maxLength) {
|
6593
|
-
end = normalizePositionByRangeLength(
|
6693
|
+
end = normalizePositionByRangeLength(
|
6694
|
+
getRandomInt(start, start + maxLength),
|
6695
|
+
maxEnd
|
6696
|
+
);
|
6594
6697
|
} else {
|
6595
6698
|
end = getRandomInt(minStart, maxEnd);
|
6596
6699
|
}
|
@@ -6642,7 +6745,11 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6642
6745
|
}
|
6643
6746
|
__name(getEachPositionInRangeAsArray, "getEachPositionInRangeAsArray");
|
6644
6747
|
function getLengthOfOverlappingRegionsBetweenTwoRanges(rangeA, rangeB, maxLength) {
|
6645
|
-
const overlaps = getOverlapsOfPotentiallyCircularRanges(
|
6748
|
+
const overlaps = getOverlapsOfPotentiallyCircularRanges(
|
6749
|
+
rangeA,
|
6750
|
+
rangeB,
|
6751
|
+
maxLength
|
6752
|
+
);
|
6646
6753
|
return overlaps.reduce(function(counter, overlap) {
|
6647
6754
|
return counter + getRangeLength(overlap, maxLength);
|
6648
6755
|
}, 0);
|
@@ -6695,13 +6802,16 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6695
6802
|
if (!(range1.start > -1 && range1.end > -1 && range2.start > -1 && range2.end > -1)) {
|
6696
6803
|
return newRanges;
|
6697
6804
|
}
|
6698
|
-
return [
|
6699
|
-
|
6700
|
-
|
6701
|
-
|
6702
|
-
|
6703
|
-
|
6704
|
-
|
6805
|
+
return [
|
6806
|
+
{
|
6807
|
+
start: range1.start,
|
6808
|
+
end: range2.end
|
6809
|
+
},
|
6810
|
+
{
|
6811
|
+
start: range2.start,
|
6812
|
+
end: range1.end
|
6813
|
+
}
|
6814
|
+
];
|
6705
6815
|
}
|
6706
6816
|
__name(getRangesBetweenTwoRanges, "getRangesBetweenTwoRanges");
|
6707
6817
|
function getSequenceWithinRange(range, sequence) {
|
@@ -6733,18 +6843,26 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6733
6843
|
__name(getShortestDistanceBetweenTwoPositions, "getShortestDistanceBetweenTwoPositions");
|
6734
6844
|
function getYOffsetForPotentiallyCircularRange(range, YOffsetLevelsWithRanges, assignYOffsetToRange) {
|
6735
6845
|
let yOffset = [];
|
6736
|
-
const openYOffsetFound = YOffsetLevelsWithRanges.some(
|
6737
|
-
|
6738
|
-
|
6739
|
-
|
6740
|
-
|
6741
|
-
|
6742
|
-
|
6743
|
-
|
6744
|
-
|
6745
|
-
|
6846
|
+
const openYOffsetFound = YOffsetLevelsWithRanges.some(
|
6847
|
+
function(rangesAlreadyAddedToYOffset, index) {
|
6848
|
+
const rangeBlocked = rangesAlreadyAddedToYOffset.some(
|
6849
|
+
function(comparisonRange) {
|
6850
|
+
return checkIfPotentiallyCircularRangesOverlap(
|
6851
|
+
range,
|
6852
|
+
comparisonRange
|
6853
|
+
);
|
6854
|
+
}
|
6855
|
+
);
|
6856
|
+
if (!rangeBlocked) {
|
6857
|
+
yOffset = index;
|
6858
|
+
if (assignYOffsetToRange)
|
6859
|
+
range.yOffset = index;
|
6860
|
+
rangesAlreadyAddedToYOffset.push(range);
|
6861
|
+
return true;
|
6862
|
+
}
|
6863
|
+
return false;
|
6746
6864
|
}
|
6747
|
-
|
6865
|
+
);
|
6748
6866
|
if (!openYOffsetFound) {
|
6749
6867
|
yOffset = YOffsetLevelsWithRanges.length;
|
6750
6868
|
if (assignYOffsetToRange)
|
@@ -6758,7 +6876,11 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6758
6876
|
let maxYOffset = 0;
|
6759
6877
|
const yOffsetLevels = [];
|
6760
6878
|
ranges.forEach(function(range) {
|
6761
|
-
const yOffset = getYOffsetForPotentiallyCircularRange(
|
6879
|
+
const yOffset = getYOffsetForPotentiallyCircularRange(
|
6880
|
+
range,
|
6881
|
+
yOffsetLevels,
|
6882
|
+
assignYOffsetToRange
|
6883
|
+
);
|
6762
6884
|
yOffsets.push(yOffset);
|
6763
6885
|
if (yOffset > maxYOffset) {
|
6764
6886
|
maxYOffset = yOffset;
|
@@ -6791,8 +6913,16 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6791
6913
|
}
|
6792
6914
|
__name(invertRange$1, "invertRange$1");
|
6793
6915
|
function isPositionCloserToRangeStartThanRangeEnd(position, range, maxLength) {
|
6794
|
-
const distanceFromStart = getShortestDistanceBetweenTwoPositions(
|
6795
|
-
|
6916
|
+
const distanceFromStart = getShortestDistanceBetweenTwoPositions(
|
6917
|
+
range.start,
|
6918
|
+
position,
|
6919
|
+
maxLength
|
6920
|
+
);
|
6921
|
+
const distanceFromEnd = getShortestDistanceBetweenTwoPositions(
|
6922
|
+
range.end,
|
6923
|
+
position,
|
6924
|
+
maxLength
|
6925
|
+
);
|
6796
6926
|
return distanceFromStart <= distanceFromEnd;
|
6797
6927
|
}
|
6798
6928
|
__name(isPositionCloserToRangeStartThanRangeEnd, "isPositionCloserToRangeStartThanRangeEnd");
|
@@ -6837,9 +6967,15 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6837
6967
|
}
|
6838
6968
|
__name(trimNumberToFitWithin0ToAnotherNumber, "trimNumberToFitWithin0ToAnotherNumber");
|
6839
6969
|
function zeroSubrangeByContainerRange(subRange, containerRange, sequenceLength) {
|
6840
|
-
const trimmedSubRange = trimRangeByAnotherRange(
|
6970
|
+
const trimmedSubRange = trimRangeByAnotherRange(
|
6971
|
+
subRange,
|
6972
|
+
containerRange,
|
6973
|
+
sequenceLength
|
6974
|
+
);
|
6841
6975
|
if (trimmedSubRange) {
|
6842
|
-
throw new Error(
|
6976
|
+
throw new Error(
|
6977
|
+
"subRange must be fully contained by containerRange! Otherwise this function does not make sense"
|
6978
|
+
);
|
6843
6979
|
}
|
6844
6980
|
const newSubrange = {};
|
6845
6981
|
newSubrange.start = subRange.start - containerRange.start;
|
@@ -6867,12 +7003,24 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
6867
7003
|
}
|
6868
7004
|
__name(modulo, "modulo");
|
6869
7005
|
function getZeroedRangeOverlaps(annotation, selection, sequenceLength) {
|
6870
|
-
const overlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
7006
|
+
const overlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
7007
|
+
getOverlapsOfPotentiallyCircularRanges(
|
7008
|
+
annotation,
|
7009
|
+
selection,
|
7010
|
+
sequenceLength
|
7011
|
+
),
|
7012
|
+
sequenceLength,
|
7013
|
+
annotation
|
7014
|
+
);
|
6871
7015
|
const zeroedOverlaps = overlaps.map((overlap) => {
|
6872
|
-
return zeroSubrangeByContainerRange(
|
6873
|
-
|
6874
|
-
|
6875
|
-
|
7016
|
+
return zeroSubrangeByContainerRange(
|
7017
|
+
overlap,
|
7018
|
+
{
|
7019
|
+
start: selection.start,
|
7020
|
+
end: normalizePositionByRangeLength(selection.start - 1, sequenceLength)
|
7021
|
+
},
|
7022
|
+
sequenceLength
|
7023
|
+
);
|
6876
7024
|
});
|
6877
7025
|
return zeroedOverlaps;
|
6878
7026
|
}
|