90 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _genmapping = require('@jridgewell/gen-mapping');
 | 
						|
 | 
						|
 | 
						|
 | 
						|
var _charcodes = require('./parser/util/charcodes');
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 * Generate a source map indicating that each line maps directly to the original line,
 | 
						|
 * with the tokens in their new positions.
 | 
						|
 */
 | 
						|
 function computeSourceMap(
 | 
						|
  {code: generatedCode, mappings: rawMappings},
 | 
						|
  filePath,
 | 
						|
  options,
 | 
						|
  source,
 | 
						|
  tokens,
 | 
						|
) {
 | 
						|
  const sourceColumns = computeSourceColumns(source, tokens);
 | 
						|
  const map = new (0, _genmapping.GenMapping)({file: options.compiledFilename});
 | 
						|
  let tokenIndex = 0;
 | 
						|
  // currentMapping is the output source index for the current input token being
 | 
						|
  // considered.
 | 
						|
  let currentMapping = rawMappings[0];
 | 
						|
  while (currentMapping === undefined && tokenIndex < rawMappings.length - 1) {
 | 
						|
    tokenIndex++;
 | 
						|
    currentMapping = rawMappings[tokenIndex];
 | 
						|
  }
 | 
						|
  let line = 0;
 | 
						|
  let lineStart = 0;
 | 
						|
  if (currentMapping !== lineStart) {
 | 
						|
    _genmapping.maybeAddSegment.call(void 0, map, line, 0, filePath, line, 0);
 | 
						|
  }
 | 
						|
  for (let i = 0; i < generatedCode.length; i++) {
 | 
						|
    if (i === currentMapping) {
 | 
						|
      const genColumn = currentMapping - lineStart;
 | 
						|
      const sourceColumn = sourceColumns[tokenIndex];
 | 
						|
      _genmapping.maybeAddSegment.call(void 0, map, line, genColumn, filePath, line, sourceColumn);
 | 
						|
      while (
 | 
						|
        (currentMapping === i || currentMapping === undefined) &&
 | 
						|
        tokenIndex < rawMappings.length - 1
 | 
						|
      ) {
 | 
						|
        tokenIndex++;
 | 
						|
        currentMapping = rawMappings[tokenIndex];
 | 
						|
      }
 | 
						|
    }
 | 
						|
    if (generatedCode.charCodeAt(i) === _charcodes.charCodes.lineFeed) {
 | 
						|
      line++;
 | 
						|
      lineStart = i + 1;
 | 
						|
      if (currentMapping !== lineStart) {
 | 
						|
        _genmapping.maybeAddSegment.call(void 0, map, line, 0, filePath, line, 0);
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  const {sourceRoot, sourcesContent, ...sourceMap} = _genmapping.toEncodedMap.call(void 0, map);
 | 
						|
  return sourceMap ;
 | 
						|
} exports.default = computeSourceMap;
 | 
						|
 | 
						|
/**
 | 
						|
 * Create an array mapping each token index to the 0-based column of the start
 | 
						|
 * position of the token.
 | 
						|
 */
 | 
						|
function computeSourceColumns(code, tokens) {
 | 
						|
  const sourceColumns = new Array(tokens.length);
 | 
						|
  let tokenIndex = 0;
 | 
						|
  let currentMapping = tokens[tokenIndex].start;
 | 
						|
  let lineStart = 0;
 | 
						|
  for (let i = 0; i < code.length; i++) {
 | 
						|
    if (i === currentMapping) {
 | 
						|
      sourceColumns[tokenIndex] = currentMapping - lineStart;
 | 
						|
      tokenIndex++;
 | 
						|
      currentMapping = tokens[tokenIndex].start;
 | 
						|
    }
 | 
						|
    if (code.charCodeAt(i) === _charcodes.charCodes.lineFeed) {
 | 
						|
      lineStart = i + 1;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return sourceColumns;
 | 
						|
}
 |