source: trip-planner-front/node_modules/source-list-map/lib/fromStringWithSourceMap.js@ 8d391a1

Last change on this file since 8d391a1 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 3.0 KB
Line 
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5"use strict";
6
7const base64VLQ = require("./base64-vlq");
8const SourceNode = require("./SourceNode");
9const CodeNode = require("./CodeNode");
10const SourceListMap = require("./SourceListMap");
11
12module.exports = function fromStringWithSourceMap(code, map) {
13 const sources = map.sources;
14 const sourcesContent = map.sourcesContent;
15 const mappings = map.mappings.split(";");
16 const lines = code.split("\n");
17 const nodes = [];
18 let currentNode = null;
19 let currentLine = 1;
20 let currentSourceIdx = 0;
21 let currentSourceNodeLine;
22 function addCode(generatedCode) {
23 if(currentNode && currentNode instanceof CodeNode) {
24 currentNode.addGeneratedCode(generatedCode);
25 } else if(currentNode && currentNode instanceof SourceNode && !generatedCode.trim()) {
26 currentNode.addGeneratedCode(generatedCode);
27 currentSourceNodeLine++;
28 } else {
29 currentNode = new CodeNode(generatedCode);
30 nodes.push(currentNode);
31 }
32 }
33 function addSource(generatedCode, source, originalSource, linePosition) {
34 if(currentNode && currentNode instanceof SourceNode &&
35 currentNode.source === source &&
36 currentSourceNodeLine === linePosition
37 ) {
38 currentNode.addGeneratedCode(generatedCode);
39 currentSourceNodeLine++;
40 } else {
41 currentNode = new SourceNode(generatedCode, source, originalSource, linePosition);
42 currentSourceNodeLine = linePosition + 1;
43 nodes.push(currentNode);
44 }
45 }
46 mappings.forEach(function(mapping, idx) {
47 let line = lines[idx];
48 if(typeof line === 'undefined') return;
49 if(idx !== lines.length - 1) line += "\n";
50 if(!mapping)
51 return addCode(line);
52 mapping = { value: 0, rest: mapping };
53 let lineAdded = false;
54 while(mapping.rest)
55 lineAdded = processMapping(mapping, line, lineAdded) || lineAdded;
56 if(!lineAdded)
57 addCode(line);
58 });
59 if(mappings.length < lines.length) {
60 let idx = mappings.length;
61 while(!lines[idx].trim() && idx < lines.length-1) {
62 addCode(lines[idx] + "\n");
63 idx++;
64 }
65 addCode(lines.slice(idx).join("\n"));
66 }
67 return new SourceListMap(nodes);
68 function processMapping(mapping, line, ignore) {
69 if(mapping.rest && mapping.rest[0] !== ",") {
70 base64VLQ.decode(mapping.rest, mapping);
71 }
72 if(!mapping.rest)
73 return false;
74 if(mapping.rest[0] === ",") {
75 mapping.rest = mapping.rest.substr(1);
76 return false;
77 }
78
79 base64VLQ.decode(mapping.rest, mapping);
80 const sourceIdx = mapping.value + currentSourceIdx;
81 currentSourceIdx = sourceIdx;
82
83 let linePosition;
84 if(mapping.rest && mapping.rest[0] !== ",") {
85 base64VLQ.decode(mapping.rest, mapping);
86 linePosition = mapping.value + currentLine;
87 currentLine = linePosition;
88 } else {
89 linePosition = currentLine;
90 }
91
92 if(mapping.rest) {
93 const next = mapping.rest.indexOf(",");
94 mapping.rest = next === -1 ? "" : mapping.rest.substr(next);
95 }
96
97 if(!ignore) {
98 addSource(line, sources ? sources[sourceIdx] : null, sourcesContent ? sourcesContent[sourceIdx] : null, linePosition)
99 return true;
100 }
101 }
102};
Note: See TracBrowser for help on using the repository browser.