123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- "use strict";
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() { return m[k]; } };
- }
- Object.defineProperty(o, k2, desc);
- }) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
- }));
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.buildStacks = exports.buildMappings = exports.SourceMap = void 0;
- __exportStar(require("muggle-string"), exports);
- class SourceMap {
- get memo() {
- if (!this._memo) {
- const self = this;
- this._memo = {
- sourceRange: createMemo('sourceRange'),
- generatedRange: createMemo('generatedRange'),
- };
- function createMemo(key) {
- const offsets = new Set();
- for (const mapping of self.mappings) {
- offsets.add(mapping[key][0]);
- offsets.add(mapping[key][1]);
- }
- const arr = [...offsets].sort((a, b) => a - b).map(offset => ({ offset, mappings: new Set() }));
- for (const mapping of self.mappings) {
- const startIndex = binarySearch(mapping[key][0]);
- const endIndex = binarySearch(mapping[key][1]);
- for (let i = startIndex; i <= endIndex; i++) {
- arr[i].mappings.add(mapping);
- }
- }
- return arr;
- function binarySearch(start) {
- let low = 0;
- let high = arr.length - 1;
- while (low <= high) {
- const mid = Math.floor((low + high) / 2);
- const midValue = arr[mid];
- if (midValue.offset < start) {
- low = mid + 1;
- }
- else if (midValue.offset > start) {
- high = mid - 1;
- }
- else {
- return mid;
- }
- }
- }
- }
- }
- return this._memo;
- }
- constructor(mappings) {
- this.mappings = mappings;
- }
- toSourceOffset(start, baseOnRight = false) {
- for (const mapped of this.matching(start, 'generatedRange', 'sourceRange', baseOnRight)) {
- return mapped;
- }
- }
- toGeneratedOffset(start, baseOnRight = false) {
- for (const mapped of this.matching(start, 'sourceRange', 'generatedRange', baseOnRight)) {
- return mapped;
- }
- }
- toSourceOffsets(start, baseOnRight = false) {
- return this.matching(start, 'generatedRange', 'sourceRange', baseOnRight);
- }
- toGeneratedOffsets(start, baseOnRight = false) {
- return this.matching(start, 'sourceRange', 'generatedRange', baseOnRight);
- }
- *matching(startOffset, from, to, baseOnRight) {
- const memo = this.memo[from];
- if (memo.length === 0)
- return;
- const { low: start, high: end, } = this.binarySearchMemo(memo, startOffset);
- const skip = new Set();
- for (let i = start; i <= end; i++) {
- for (const mapping of memo[i].mappings) {
- if (skip.has(mapping)) {
- continue;
- }
- skip.add(mapping);
- const mapped = this.matchOffset(startOffset, mapping[from], mapping[to], baseOnRight);
- if (mapped !== undefined) {
- yield [mapped, mapping];
- }
- }
- }
- }
- matchOffset(start, mappedFromRange, mappedToRange, baseOnRight) {
- if (start >= mappedFromRange[0] && start <= mappedFromRange[1]) {
- let offset = mappedToRange[0] + start - mappedFromRange[0];
- if (baseOnRight) {
- offset += (mappedToRange[1] - mappedToRange[0]) - (mappedFromRange[1] - mappedFromRange[0]);
- }
- if (offset >= mappedToRange[0] && offset <= mappedToRange[1]) {
- return offset;
- }
- }
- }
- binarySearchMemo(array, start) {
- let low = 0;
- let high = array.length - 1;
- while (low <= high) {
- const mid = Math.floor((low + high) / 2);
- const midValue = array[mid];
- if (midValue.offset < start) {
- low = mid + 1;
- }
- else if (midValue.offset > start) {
- high = mid - 1;
- }
- else {
- low = mid;
- high = mid;
- break;
- }
- }
- return {
- low: Math.max(Math.min(low, high, array.length - 1), 0),
- high: Math.min(Math.max(low, high, 0), array.length - 1),
- };
- }
- }
- exports.SourceMap = SourceMap;
- function buildMappings(chunks) {
- let length = 0;
- const mappings = [];
- for (const segment of chunks) {
- if (typeof segment === 'string') {
- length += segment.length;
- }
- else {
- mappings.push({
- generatedRange: [length, length + segment[0].length],
- source: segment[1],
- sourceRange: typeof segment[2] === 'number' ? [segment[2], segment[2] + segment[0].length] : segment[2],
- // @ts-ignore
- data: segment[3],
- });
- length += segment[0].length;
- }
- }
- return mappings;
- }
- exports.buildMappings = buildMappings;
- function buildStacks(chunks, stacks) {
- let offset = 0;
- let index = 0;
- const result = [];
- for (const stack of stacks) {
- const start = offset;
- for (let i = 0; i < stack.length; i++) {
- const segment = chunks[index + i];
- if (typeof segment === 'string') {
- offset += segment.length;
- }
- else {
- offset += segment[0].length;
- }
- }
- index += stack.length;
- result.push({
- range: [start, offset],
- source: stack.stack,
- });
- }
- return result;
- }
- exports.buildStacks = buildStacks;
- //# sourceMappingURL=index.js.map
|