123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.SourceMap = void 0;
- const binarySearch_1 = require("./binarySearch");
- const translateOffset_1 = require("./translateOffset");
- class SourceMap {
- constructor(mappings) {
- this.mappings = mappings;
- }
- toSourceRange(generatedStart, generatedEnd, fallbackToAnyMatch, filter) {
- return this.findMatchingStartEnd(generatedStart, generatedEnd, fallbackToAnyMatch, 'generatedOffsets', filter);
- }
- toGeneratedRange(sourceStart, sourceEnd, fallbackToAnyMatch, filter) {
- return this.findMatchingStartEnd(sourceStart, sourceEnd, fallbackToAnyMatch, 'sourceOffsets', filter);
- }
- toSourceLocation(generatedOffset, filter) {
- return this.findMatchingOffsets(generatedOffset, 'generatedOffsets', filter);
- }
- toGeneratedLocation(sourceOffset, filter) {
- return this.findMatchingOffsets(sourceOffset, 'sourceOffsets', filter);
- }
- *findMatchingOffsets(offset, fromRange, filter) {
- const memo = this.getMemoBasedOnRange(fromRange);
- if (memo.offsets.length === 0) {
- return;
- }
- const { low: start, high: end } = (0, binarySearch_1.binarySearch)(memo.offsets, offset);
- const skip = new Set();
- const toRange = fromRange == 'sourceOffsets' ? 'generatedOffsets' : 'sourceOffsets';
- for (let i = start; i <= end; i++) {
- for (const mapping of memo.mappings[i]) {
- if (skip.has(mapping)) {
- continue;
- }
- skip.add(mapping);
- if (filter && !filter(mapping.data)) {
- continue;
- }
- const mapped = (0, translateOffset_1.translateOffset)(offset, mapping[fromRange], mapping[toRange], getLengths(mapping, fromRange), getLengths(mapping, toRange));
- if (mapped !== undefined) {
- yield [mapped, mapping];
- }
- }
- }
- }
- *findMatchingStartEnd(start, end, fallbackToAnyMatch, fromRange, filter) {
- const toRange = fromRange == 'sourceOffsets' ? 'generatedOffsets' : 'sourceOffsets';
- const mappedStarts = [];
- let hadMatch = false;
- for (const [mappedStart, mapping] of this.findMatchingOffsets(start, fromRange)) {
- if (filter && !filter(mapping.data)) {
- continue;
- }
- mappedStarts.push([mappedStart, mapping]);
- const mappedEnd = (0, translateOffset_1.translateOffset)(end, mapping[fromRange], mapping[toRange], getLengths(mapping, fromRange), getLengths(mapping, toRange));
- if (mappedEnd !== undefined) {
- hadMatch = true;
- yield [mappedStart, mappedEnd, mapping, mapping];
- }
- }
- if (!hadMatch && fallbackToAnyMatch) {
- for (const [mappedStart, mappingStart] of mappedStarts) {
- for (const [mappedEnd, mappingEnd] of this.findMatchingOffsets(end, fromRange)) {
- if (filter && !filter(mappingEnd.data) || mappedEnd < mappedStart) {
- continue;
- }
- yield [mappedStart, mappedEnd, mappingStart, mappingEnd];
- break;
- }
- ;
- }
- }
- }
- getMemoBasedOnRange(fromRange) {
- return fromRange === 'sourceOffsets'
- ? this.sourceCodeOffsetsMemo ??= this.createMemo('sourceOffsets')
- : this.generatedCodeOffsetsMemo ??= this.createMemo('generatedOffsets');
- }
- createMemo(key) {
- const offsetsSet = new Set();
- for (const mapping of this.mappings) {
- for (let i = 0; i < mapping[key].length; i++) {
- offsetsSet.add(mapping[key][i]);
- offsetsSet.add(mapping[key][i] + getLengths(mapping, key)[i]);
- }
- }
- const offsets = [...offsetsSet].sort((a, b) => a - b);
- const mappings = offsets.map(() => new Set());
- for (const mapping of this.mappings) {
- for (let i = 0; i < mapping[key].length; i++) {
- const startIndex = (0, binarySearch_1.binarySearch)(offsets, mapping[key][i]).match;
- const endIndex = (0, binarySearch_1.binarySearch)(offsets, mapping[key][i] + getLengths(mapping, key)[i]).match;
- for (let i = startIndex; i <= endIndex; i++) {
- mappings[i].add(mapping);
- }
- }
- }
- return { offsets, mappings };
- }
- }
- exports.SourceMap = SourceMap;
- function getLengths(mapping, key) {
- return key == 'sourceOffsets' ? mapping.lengths : mapping.generatedLengths ?? mapping.lengths;
- }
- //# sourceMappingURL=sourceMap.js.map
|