|
1 | 1 | 'use strict'; |
2 | 2 |
|
3 | 3 | const { |
4 | | - ArrayPrototypeMap, |
| 4 | + ArrayPrototypePush, |
5 | 5 | JSONParse, |
6 | 6 | ObjectKeys, |
7 | 7 | RegExpPrototypeExec, |
8 | | - RegExpPrototypeSymbolSplit, |
9 | 8 | SafeMap, |
| 9 | + StringPrototypeCodePointAt, |
10 | 10 | StringPrototypeSplit, |
11 | 11 | } = primordials; |
12 | 12 |
|
@@ -205,14 +205,26 @@ function dataFromUrl(sourceURL, sourceMappingURL) { |
205 | 205 | // from. This allows translation from byte offset V8 coverage reports, |
206 | 206 | // to line/column offset Source Map V3. |
207 | 207 | function lineLengths(content) { |
208 | | - // We purposefully keep \r as part of the line-length calculation, in |
209 | | - // cases where there is a \r\n separator, so that this can be taken into |
210 | | - // account in coverage calculations. |
211 | | - return ArrayPrototypeMap(RegExpPrototypeSymbolSplit(/\n|\u2028|\u2029/, content), (line) => { |
212 | | - return line.length; |
213 | | - }); |
| 208 | + const contentLength = content.length; |
| 209 | + const output = []; |
| 210 | + let lineLength = 0; |
| 211 | + for (let i = 0; i < contentLength; i++, lineLength++) { |
| 212 | + const codePoint = StringPrototypeCodePointAt(content, i); |
| 213 | + |
| 214 | + // We purposefully keep \r as part of the line-length calculation, in |
| 215 | + // cases where there is a \r\n separator, so that this can be taken into |
| 216 | + // account in coverage calculations. |
| 217 | + // codepoints for \n (new line), \u2028 (line separator) and \u2029 (paragraph separator) |
| 218 | + if (codePoint === 10 || codePoint === 0x2028 || codePoint === 0x2029) { |
| 219 | + ArrayPrototypePush(output, lineLength); |
| 220 | + lineLength = -1; // To not count the matched codePoint such as \n character |
| 221 | + } |
| 222 | + } |
| 223 | + ArrayPrototypePush(output, lineLength); |
| 224 | + return output; |
214 | 225 | } |
215 | 226 |
|
| 227 | + |
216 | 228 | function sourceMapFromFile(mapURL) { |
217 | 229 | try { |
218 | 230 | const fs = require('fs'); |
|
0 commit comments