(delta: InsertDelta, start: number, length: number)
| 45 | } |
| 46 | |
| 47 | export function sliceInsertDelta(delta: InsertDelta, start: number, length: number): InsertDelta { |
| 48 | if (length < 1) { |
| 49 | return [] |
| 50 | } |
| 51 | |
| 52 | let currentOffset = 0 |
| 53 | const sliced: InsertDelta = [] |
| 54 | const end = start + length |
| 55 | |
| 56 | for (let i = 0; i < delta.length; i++) { |
| 57 | if (currentOffset >= end) { |
| 58 | break |
| 59 | } |
| 60 | |
| 61 | const element = delta[i] |
| 62 | const elementLength = getInsertLength(element) |
| 63 | |
| 64 | if (currentOffset + elementLength <= start) { |
| 65 | currentOffset += elementLength |
| 66 | continue |
| 67 | } |
| 68 | |
| 69 | if (typeof element.insert !== 'string') { |
| 70 | currentOffset += elementLength |
| 71 | sliced.push(element) |
| 72 | continue |
| 73 | } |
| 74 | |
| 75 | const startOffset = Math.max(0, start - currentOffset) |
| 76 | const endOffset = Math.min(elementLength, elementLength - (currentOffset + elementLength - end)) |
| 77 | |
| 78 | sliced.push({ |
| 79 | ...element, |
| 80 | insert: element.insert.slice(startOffset, endOffset), |
| 81 | }) |
| 82 | currentOffset += elementLength |
| 83 | } |
| 84 | |
| 85 | return sliced |
| 86 | } |
no test coverage detected
searching dependent graphs…