Blame view

node_modules/clean-css/lib/reader/input-source-map-tracker.js 1.35 KB
6a9ffbcc   liuqimichale   地图点击事件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
  var SourceMapConsumer = require('source-map').SourceMapConsumer;
  
  function inputSourceMapTracker() {
    var maps = {};
  
    return {
      all: all.bind(null, maps),
      isTracking: isTracking.bind(null, maps),
      originalPositionFor: originalPositionFor.bind(null, maps),
      track: track.bind(null, maps)
    };
  }
  
  function all(maps) {
    return maps;
  }
  
  function isTracking(maps, source) {
    return source in maps;
  }
  
  function originalPositionFor(maps, metadata, range, selectorFallbacks) {
    var line = metadata[0];
    var column = metadata[1];
    var source = metadata[2];
    var position = {
      line: line,
      column: column + range
    };
    var originalPosition;
  
    while (!originalPosition && position.column > column) {
      position.column--;
      originalPosition = maps[source].originalPositionFor(position);
    }
  
    if (!originalPosition || originalPosition.column < 0) {
      return metadata;
    }
  
    if (originalPosition.line === null && line > 1 && selectorFallbacks > 0) {
      return originalPositionFor(maps, [line - 1, column, source], range, selectorFallbacks - 1);
    }
  
    return originalPosition.line !== null ?
      toMetadata(originalPosition) :
      metadata;
  }
  
  function toMetadata(asHash) {
    return [asHash.line, asHash.column, asHash.source];
  }
  
  function track(maps, source, data) {
    maps[source] = new SourceMapConsumer(data);
  }
  
  module.exports = inputSourceMapTracker;